Generátor jmen
Možná máte stejný problém jako já a když instalujete nový počítač, ze všeho nejdéle vám trvá vymyslet pro něj jméno. Pokud sdílíte tuto potíž, možná vám pomůže udělátko, které jsem si napsala: generátor náhodných, přesto však celkem přirozeně vypadajících jmen. Stačí jej nakrmit informacemi o nějakém konkrétním jazyce (soubory s několika jazyky jsou přiloženy), a potom už se z něj vesele posypou nesmyslná slova, onomu jazyku se nápadně podobající. No, má to jeden háček - je to obluda napsaná v Haskellu a dostanete jenom zdrojáky. Ale nebojte, s pravděpodobností hraničící s jistotou to půjde zkompilovat dokonce i na ošklivém systému z Redmondu :-)Totiž to je takhle: když jsem se onehdy prohrabávala logy z webserveru, zjistila jsem, že překvapivé množství návštěvníků se sem progooglí hledajíce nějaký "generátor jmen," zřejmě v návaznosti na mé povídání o novém počítači a hlavně následnou diskusi. Inu, politovala jsem je, jelikož tu nic takového nenašli. A vlastně jsem měla pocit, že jim to možná trochu dlužím. A protože v pondělí jdu na zkoušku, kde bych měla předvést znalosti Haskellu, rozhodla jsem se zabít dvě mouchy jednou ranou a naučit se Haskell psaním generátoru.
O tom, jak obluda funguje, nejlépe hovoří zdrojáky, princip je ale následující: prostě si pro každý jazyk předpočítá, s jakou pravděpodobností by měla vygenerovat který znak, když ví, jak vypadaly dva znaky předchozí. Funguje to překvapivě pěkně, pokusy ukázaly, že když bude znát ne dva, ale tři znaky, výsledky už budou příliš podobné skutečným slovům z korpusu.
O tom, jak funguje Haskell někomu, kdo se donedávna potkával jen s poměrně céčkoidními jazyky, by se dalo vyprávět dlouze a poučně: na to, že mám jen rekurzi a krásné funkce pro práci se seznamy jsem si zvykla celkem rychle, už mám za sebou zápočťák z Prologu. Ovšem pochopit jako fungují monads a zvládnout tak vstup a výstup mi trvalo skoro tak dlouho, jako napsat všechno ostatní (a stejně mám pocit, že tomu pořád moc nerozumím) - přestože v tom ostatním jsem si třeba poprvé v životě vyzkoušela vkládání do AVL stromu.
Tak... teď si představte, že jste si přečetli tři až čtyři odstavce o tom, jak se v Haskellu příjemně píše... (jestli Vám to fakt nejde, tak je třeba někdy dopíšu :-)) a pokud ho ještě neznáte, běžte si ho vyzkoušet. A třeba mi poslat nějaký pěkný patch :-)
Ještě pár ukázek výstupu z generátoru v závislosti na tom, jakými jazyky byl nakrmen:
finština: kunssa adaran sinoina kaanaja olimppia pienty taamaniin kaikaasti eissaan aikiikenlatina: prahen srueres ciliquerenti amplebait quatquatum pratuoruet exstior duorunt inemper eregum
sanskrt: ruvaandha gunamamantishmana jamaatmitaseevaan vidakaava seetyaapajaas nershe asmaantaa karjunya praamanti shnairlayato
angličtina: itteem wittenteffeel shinthend thymble mongedne herestrarme thaver wasund aburnfrojesirt begivid
Osobně myslím, že pro každé slovo o pěti nebo méně písmenech by se našel jazyk, ve kterém to znamená něco nemravného nebo neslušného. Když ne na naší planetě, tak na nějaké jiné.
hostname
z pokolení na pokolení. :-)
q x = if x==[] then [] else q [l | l<-tail x, l<head x] ++ [head x] ++ q [r | r<-tail x, r>=head x]
A mozna nekdo umi i hezci...
cestina:
knikoncnickem
jakaprozna
priprilli
zapsim
co
tohlahudo
pradehm
ta
bysletuden
budejaka
Ja jsem si mezitim vyrobila jeste sindarstinu, quenyu a irstinu, to je krasa :-)