Seznam in-house knihoven
Odpřednášena v úterý 24. 11.
U každé knihovny je i odkaz na její implementaci, abyste se mohli podívat, jak vypadá.
Game of Life utility
Zjednodušuje některé otravné operace s gridy.
Použití
import shared-gdrive("gol-helpers", "1husISXaN1FiZy8S7RJrdX5lt_XVAoxuW") as G ... G.draw-grid(...) G.generate-grid(...)
Implementace
Dokumentace
Typ Grid<T>
zde označuje List<List<T>>
. Všimněte si, že tyto funkce nejsou specializované na náš typ buňky (tj. dead
nebo alive(born)
), ale pracují prostě s nějakým obecným T
.
Na konkrétním typu buňky jim prostě vůbec nezáleží — je pro ně hlavně důležité, že pokud mám Grid<T>
, mám i příslušnou funkci draw-cell :: (T -> Image)
(v případě draw-grid
).
draw-grid<T>(g :: Grid<T>, draw-cell :: (T -> Image)) -> Image
pomocí funkcedraw-cell
nakreslí všechny buňky zg
a výsledné obrázky slepí dohromady do jednoho velkého obrázku celéhog
generate-grid<T>(gen :: (Number, Number -> T), w :: Number, h :: Number) -> Grid<T>
vytvoříGrid
velikostiw x h
, každou buňku v něm udělá pomocígen
. Funkcigen
dáme u každého místa jeho souřadnice, agen
nám na základě těchto souřadnic vrátí nějakou buňku. Většinou ale vgen
tyto souřadnice ignorujeme a prostě vrátíme nějakou náhodnou buňku.
Timing
Knihovna sloužící k měření rychlosti funkcí.
Použití
import shared-gdrive("timing", "1hcSxH1zW9wxRu1IgcLVmFstMg1oqoi4q") as T ... T.time(...) T.time-avg(...)
Implementace
Dokumentace
time<T>(f :: (T -> Any), arg :: T) -> Number
měří, jak dlouho trvá spuštěníf(arg)
, a vrátí tento čas v milisekundáchtime-avg<T>(f :: (T -> Any), arg :: T, n :: Number) -> Number
průměru délku spuštěníf(arg)
přesn
pokusů, a tento průměrný čas vrátí v milisekundách
Převod HSV na RGB
Tato knihovna doplňuje tradiční RGB vytváření barev možností použít HSV.
Použití
include shared-gdrive("color-utils", "1mpw4clgkijjYJGrMGvAIrQG7m_Vv_Xx3") ... hsv(...)
Implementace
Dokumentace
hsv(hue :: Number, saturation :: Number, value :: Number) -> Color
vrátí Pyretovkou barvu (tj typColor
z knihovnycolors
) s danými parametry; všechna čísla musí být v intervalu od 0 do 1, jinak je chováníhsv
nedefinované
Stringové utility
Doporučuji tuto knihovnu příliš nepoužívat, je totiž neefektivní. Sloužila jen k představení rekurze ještě v dobách, kdy jsme neznali seznamy.
Použití
import shared-gdrive("string-utils", "1QChebN-p7mUEmccxwsn-3Xz6X-4k9gFd") as S ... S.string-first(...) S.string-rest(...)
Implementace
Dokumentace
string-first(s :: String) -> String
vrací první písmeno zs
, popř.""
pokud jes
prázdnýstring-rest(s :: String) -> String
vrací všechna písmena zs
kromě toho prvního, popř.""
pokud jes
prázdný