Začít jednoduchým příkladem je složité, protože jednoduché příklady nejsou žádné čáry. Sečíst první číslo s druhým je snadné, na to člověk nemusí být čaroděj. Jenže když se učíme nový jazyk, začínáme s jednoduchými slovy a jednoduchými větami. Kouzelný jazyk není výjimkou.
(+ 0 3.14)
je věta kouzelného jazyka, která sečte 0
a 3.14
. Podstatná jména této kouzelné věty se nemusí překládat, čísla jsou v cizích jazycích (většinou) stejná.
Sloveso se přeložit musí, ale (zase naštěstí) je sloveso z kouzelné věty, +
, hodně podobné symbolu, který používáme v matematice. Zatím to vypadá, že naučit se kouzelný jazyk bude hračka.
Pro podstatná jména kouzelného jazyka, která uchovávají nějakou číselnou informaci, se ještě hodí následující slovesa kouzelného jazyka: -
, *
, /
, nebo min
, max
, a abs
.
Neprogramátora občas trápí, kolik papíru je potřeba na obalení krabice, která je 20 centimetrů dlouhá, 10 centimetrů široká a 2 centimetry vysoká. Třeba když jsou Vánoce. Vezme si pak tužku a papír a informaci vypočítá: Shora a zdola je to dvakrát 20 krát 10 centimetrů. Zboku je to 20 krát 2 a 10 krát 2 centimetry a zase 20 krát 2 a 10 krát 2 centimetry. Dohromady je tedy potřeba 520 centimetrů čtverečních papíru!
Čaroděj v kouzelném jazyce popíše kouzelné hůlce, co jej trápí:
(* 20 10)
, tedy (* 2 (* 20 10))
.(* 20 2)
a (* 10 2)
, tedy (+ (* 20 2) (* 10 2))
.(+ (* 20 2) (* 10 2))
. Čarodějova mocná věta tedy zní:
Když je neprogramátor hotový s balením, zase vezme tužku a papír a spočítá, kolik bude třeba centimetrů stuhy: Od středu krabice je to polovina 20 centimetrů (polovina délky), pak 2 centimetry, pak celých 20 centimetrů, znova 2 a nakonec zas půlka 20 centimetrů. K tomu přidá ještě (opět od středu krabice) polovinu 10 centimetrů (polovina šířky), pak 2 a 10 a 2 a zase polovinu 10 centimetrů. Dohromady 68 centimetrů stuhy!
Jestli je neprogramátor matematik, vypočítá těch 520 centimetrů čtverečních jinak. Krabice se skládá ze tří párů obdélníků. Elegantní řešení je tedy sečíst dvojnásobky obsahů těchto obdélníků.
Jestli je čaroděj matematik, svěří kouzelné hůlce kouzelnou větu:
Stuha je dlouhá dvě délky, dvě šířky a čtyři výšky krabice.
Nejdůležitější slovesa kouzelného jazyka pro práci s textem jsou: string-length
, substring
, string-append
, number->string
a string->number
.
Teď je čas zjistit, jak dlouhé je slovo Neprogramátor To čaroděj zjistí celkem jednoduše:
A také celkem jednoduše nechá kouzelnou hůlku odpovědět celou větou:
Pro každý typ podstatného jména se hodí trochu jiná slovesa. Také se očekává, že slovesa kouzelného jazyka se budou používat se správným typem podstatných jmen. Byla by proto chyba použít pro sloveso string-append
podstatné jméno získané z vyhodnocení (string-length "Neprogramátor")
. Protože string-append
se hodí na text, jenže výsledek vykonání (string-length "Neprogramátor")
je číslo.
To ale neznamená, že sloveso kouzelného jazyka očekává pořád stejný typ podstatných jmen!
Podstatná jména #t
a #f
jsou pravdivostní hodnoty. Pravda a nepravda. true
a false
. K těm se hodí slovesa and
, or
a not
. Větami kouzelného jazyka složených z takových podstatných jmen a sloves se zabývá Logika.
Kouzelné větě začínající slovesem and
se říká konjunkce. Taková věta je pravdivá (vyhodnocení kouzelnou hůlkou má výsledek #t
) pouze tehdy, pokud jsou všechna podstatná jména ve větě také #t
. Jestliže je alespoň jedno podstatné jméno ve větě #f
, výsledek takové věty je #f
.
Věty kouzelného jazyka popisující pravdivostní hodnoty konjunkce jsou:
Kouzelné větě začínající slovesem or
se říká disjunkce. Taková věta je nepravda (vyhodnocení kouzelnou hůlkou má výsledek #f
) pouze tehdy, pokud jsou všechna podstatná jména ve větě také #f
. Jestliže je alespoň jedno podstatné jméno ve větě #t
, výsledek takové věty je #t
.
Věty kouzelného jazyka popisující pravdivostní hodnoty disjunkce jsou:
Kouzelné větě začínající slovesem not
se říká negace. Výsledek negace pro podstatné jméno #t
je #f
. Výsledek negace pro podstatné jméno #f
je #t
.
Věty kouzelného jazyka popisující pravdivostní hodnoty negace jsou:
Podstatná jména:
0
nebo 3.14
"Neprogramátor"
#t
a #f
Slovesa pro čísla:
+
sečti čísla-
odečti čísla*
vynásob čísla/
vyděl číslamin
najdi nejmenší číslomax
najdi největší čísloabs
absolutní hodnota číslaSlovesa pro text:
string-length
počet znaků textusubstring
část textu od dostring-append
spojení textůnumber->string
číslo na textstring->number
text na čísloSlovesa pro pravdivostní hodnoty:
and
konjunkceor
disjunkcenot
negace