Vykonat či nevykonat: predikáty a podmínkové výrazy

Č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á")
Co vrátí kouzelná hůlka, když jsou obě krabice obalené?

Kouzelná hůlka vrátí "oddechne".

Nebo lépe

Co vrátí, když nejsou?

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.

Obě krabice obalené?
První a druhá krabice obalená?

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á")
Co by kouzelná hůlka vrátila po vykonání takové věty, když jsou obě krabice obalené?

Kouzelná hůlka vrátí "oddechne".

Nebo lépe

Co by vrátila, kdyby druhá krabice obalená nebyla?

Kouzelná hůlka vrátí "maká".

Nebo lépe

Co když je možností více?

Č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.

Vývojový diagram dvou navazujících podmínek.

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:

Co vrátí kouzelná hůlka po vykonání této věty, pokud 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á".

Jak by zněla kouzelná věta stejného významu, kde by ale byl nejdříve použitý predikát se slovesem or a teprve potom predikát se slovesem and?
Vývojový diagram dvou navazujících podmínek.
Jak by zněla kouzelná věta stejného významu, kde by vůbec nebyly použity věty-predikáty, ale jen podstatná jména-predikáty první-krabice-obalená? a druhá-krabice-obalená??

Buď

a nebo

Vývojový diagram dvou navazujících podmínek.

Jde to i bez vnořování?

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.

Proč?

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č?

Protože 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.

Kterému vývojovému diagramu (obrázky výše) se nejvíce podobá kouzelná věta s kouzelným slovesem cond a proč?
Vývojový diagram dvou navazujících podmínek.

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.

Slovníček kouzelného jazyka

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:

I když některé ano:

Slovesa pro text, která se používají v predikátech, konvenci s otazníkem na konci dodržují:

Slovesa pro pravdivostní hodnoty jsou tři:


CC BY-SA 4.0 neprogramator.cz