Čaroděj se na spostu různých situací připravuje tak, že pro každou situaci vymyslí nějakou větu, která se vykoná, když daná situace nastane. Jako třeba, že když jsou obě krabice obalené, čaroděj si oddechne, jinak maká. Taková věta se v kouzelném jazyce zapíše pomocí slovesa if
.
(if obě-krabice-obalené? "oddechne" "maká")
Kouzelná hůlka vrátí "oddechne"
.
Nebo lépe
Kouzelná hůlka vrátí "maká"
.
Nebo lépe
Podstatnému jménu obě-krabice-obalené?
se říká predikát. Predikát je podstatné jméno nebo věta, která může být pravda nebo taky ne, a dohoda je, že predikáty končí otazníkem (?). Když je predikát kouzelná věta, končí otazníkem sloveso.
Kouzelná věta plnící stejnou funkci, která má ale místo podstatného jména-predikátu obě-krabice-obalené?
nějakou větu-predikát, by mohla vypadat třeba:
(if (and první-krabice-obalená? druhá-krabice-obalená?)
"oddechne"
"maká")
Kouzelná hůlka vrátí "oddechne"
.
Nebo lépe
Kouzelná hůlka vrátí "maká"
.
Nebo lépe
Čaroděj si dá krátkou pauzu, když má obalenou alespoň jednu krabici. V kouzelném jazyce proto napíše:
Tím si ale dává krátkou pauzu i když už má obě krabice obalené!
A to čaroděj nechce. Potřebuje nějakou větu, která po vykonání kouzelnou hůlkou vrátí jeho zasloužený oddych, pokud jsou obě krabice obalené, a krátkou pauzu, když je obalená pouze jedna z nich. Ale když není obalená žádná krabice, musí čaroděj makat.
Anglicky se "když" řekne if
, což je shodou okolností sloveso kouzelného jazyka. Po chvilce zamyšlení a uvědomění si, že kouzelná věta vrátí nějaké slovo kouzelného jazyka poté, co kouzelná hůlka větu vykoná, může čaroděj přijít s něčím jako:
první-krabice-obalená?
a druhá-krabice-obalená?
budou postupně nabývat hodnot #t #t
, #t #f
, #f #t
a #f #f
?Kouzelná hůlka vrátí "oddechne"
, "pauzička"
, "pauzička"
a "maká"
.
or
a teprve potom predikát se slovesem and
?první-krabice-obalená?
a druhá-krabice-obalená?
?Buď
a nebo
Pokud se chce čaroděj připravit na spoustu různých situací, brzy mu dojde trpělivost a místo kouzelného slovesa if
použije kouzelné sloveso cond
. cond
dovolí čaroději použít predikáty, jako by to byla slovesa, která provedou: "Jestli jsem (predikát) pravda, vykonej větu, co je hned za mnou, případně vrať slovo, co je hned za mnou!"
Čaroděj obalující dvě krabice má celkem čtyři situace, do kterých se může dostat. Nemá obalenou ani jednu krabici, nebo má obalenou první nebo druhou krabici, anebo má obalené obě.
Protože cond
mění funkci predikátu z podstatného jména na sloveso – místo "jsem pravda, nebo ne" se z predikátu stane "jestli jsem pravda, vykonej větu, co je hned za mnou, případně vrať slovo, co je hned za mnou!" – záleží na pořadí, ve kterém jsou predikáty napsané. Když se třeba prohodí řádky s and
a or
, čaroděj si nikdy neoddechne.
Protože Protože or
je pravda vždy, když je pravda i and
, ale obráceně to neplatí: and
nemusí být pravda, když or
pravda je.
Proč?
and
je pravda, když jsou pravda oba predikáty, první-krabice-obalená?
i druhá-krabice-obalená?
. or
je pravda, když je pravda alespoň jeden z nich.
cond
a proč?
Protože jako první se vykoná kouzelná věta-predikát se slovesem and
a jako druhá ta se slovesem or
. Kouzelné sloveso cond
se hodí pro implementaci vývojových diagramů, které rostou směrem NE, v případě diagramů nahoře tedy doprava.
Kouzelné slovo else
je vlastně #t
a v cond
tedy říká: "Vždy vykonej větu, co je hned za mnou, případně vrať slovo, co je hned za mnou!". Hodí se to, když čaroděj ví, co má kouzelná hůlka vykonat, když všechny ostatní hodnoty selžou.
Kouzelným slovesům if
a cond
se říká podmínkové výrazy, protože jejich vykonávání, a tedy i informace, kterou po vykonání kouzelné věty začínající slovesem if
nebo cond
kouzelná hůlka vrátí, záleží na podmínce.
Slovesa pro čísla, která se používají v predikátech, většinou nekončí otazníkem:
=
všechna čísla jsou si rovna?<
všechna čísla řazena vzestupně?>
všechna čísla řazena sestupně?<=
všechna čísla řazena neklesajíce?>=
všechna čísla řazena nestoupajíce?I když některé ano:
number?
je číslo?integer?
je celé číslo?zero?
je nula?positive?
je kladné?negative?
je záporné?odd?
je liché?even?
je sudé?Slovesa pro text, která se používají v predikátech, konvenci s otazníkem na konci dodržují:
string?
je text?string=?
jsou texty stejné?string-ci=?
jsou texty stejné bez ohledu na velikost písmen?string<?
, string>?
, string<=?
, string>=?
jsou texty lexikograficky řazené?string-ci<?
, string-ci>?
, string-ci<=?
, string-ci>=?
jsou texty lexikograficky řazené bez ohledu na velikost písmen?Slovesa pro pravdivostní hodnoty jsou tři:
and
konjunkce
or
disjunkce
not
negace