Neprogramátor/Pojmenování informací: definice proměnných
Stejně jako se čaroděj může naučit nová slova kouzelného jazyka, může se nová slova naučit i kouzelná hůlka. Tedy... spíše je to čaroděj, kdo kouzelnou hůlku nová slova naučí. Má na to totiž kouzelná slovesa.
Nová slova v jedné kouzelné větě
editovatJedno z takových sloves je let
a může se hodit, třeba když čaroděje stále trápí balení krabice, která je 20 centimetrů dlouhá, 10 centimetrů široká a 2 centimetry vysoká.
-
Kolik papíru je potřeba na obalení krabice?
-
Kolik stuhy je potřeba na zavázání krabice?
-
Kolik papíru a stuhy je potřeba na obalení a zavázání krabice?
(+ (* 2 (* 20 10)) (+ (* 20 2) (* 10 2)) (+ (* 20 2) (* 10 2)))
Místo toho, aby čaroděj vyblekotal kouzelnou větu plnou záhadných čísel, může se na chvilku zastavit a říct si:
délka
je 20šířka
je 10výška
je 2- všechny rozměry jsou v centimetrech
a já potřebuji vypočítat:
- dva obsahy obdélníku: horního a dolního
- obsah obdélníků z dlouhé a krátké strany
- a ty poslední dva obsahy vlastně ještě jednou
Nakonec ze sebe dostane kouzelnou větu
(let ((délka 20)
(šířka 10)
(výška 2))
(+ (* 2 (* délka šířka))
(* délka výška) (* šířka výška)
(* délka výška) (* šířka výška)))
Čaroděje taková věta potěší, hlavně když bude balit další krabici, která je 13 centimetrů dlouhá, 17 centimetrů široká a 6.5 centimetry vysoká.
Kolik papíru potřebuje na další krabici?
832 centimetrů čtverečních.
(let ((délka 13)
(šířka 17)
(výška 6.5))
(+ (* 2 (* délka šířka))
(* délka výška) (* šířka výška)
(* délka výška) (* šířka výška)))
Kolik stuhy potřebuje čaroděj na první krabici?
68 centimetrů.
(let ((délka 20)
(šířka 10)
(výška 2))
(+ (* 2 délka) (* 2 šířka) (* 4 výška)))
A kolik stuhy potřebuje na tu druhou?
86 centimetrů.
(let ((délka 13)
(šířka 17)
(výška 6.5))
(+ (* 2 délka) (* 2 šířka) (* 4 výška)))
Čaroděj může naučit kouzelnou hůlku jména i jiných podstatných jmen než jen čísel.
Jak lze použít let
v následující kouzelné větě?
(string-append "Délka slova " "Neprogramátor" " je "
(number->string (string-length "Neprogramátor")))
(let ((slovo "Neprogramátor"))
(string-append "Délka slova " slovo " je "
(number->string (string-length slovo))))
A jak v této?
(substring "Neprogramátor" 2 (string-length "Neprogramátor"))
(let ((slovo "Neprogramátor"))
(substring slovo 2 (string-length slovo)))
Je potřeba nezapomínat, že když kouzelná hůlka vykoná kouzelnou větu, výsledek je zase slovo kouzelného jazyka. Čaroděj má tak volnou ruku při tvoření mocných vět.
(string-append
"Délka slova "
(substring
"Neprogramátor" 2 (string-length "Neprogramátor"))
" je "
(number->string
(string-length
(substring
"Neprogramátor" 2 (string-length "Neprogramátor")))))
Jak by čaroděj použil let
v takové větě?
Čaroděj má více možností, jak to tak u vyjadřování myšlenek pomocí jazyků bývá. Jako v minulých případech může pojmenovat podstatné jméno "Neprogramátor"
:
(let ((slovo "Neprogramátor"))
(string-append
"Délka slova " (substring slovo 2 (string-length slovo)) " je "
(number->string
(string-length
(substring slovo 2 (string-length slovo))))))
Také si ale může všimnout, že se opakuje nejen podstatné jméno "Neprogramátor"
, ale i věta začínající slovesem substring
:
(let ((slovo (substring
"Neprogramátor" 2 (string-length "Neprogramátor"))))
(string-append "Délka slova " slovo " je "
(number->string (string-length slovo)))
Navíc let
je sloveso uvozující kouzelnou větu, takže čaroději nic nebrání použít výsledek vykonání takové kouzelné věty jako část jiné kouzelné věty:
(let ((slovo "Neprogramátor"))
(let ((část (substring slovo 2 (string-length slovo))))
(string-append "Délka slova " část " je "
(number->string (string-length část)))))
Na poslední úpravu už ale sloveso let
nestačí. Pomocí let
lze pojmenovat podstatná jména, která na sobě nezávisí. Jenže podstatné jméno část
závisí na podstatném jméně slovo
! Pro to, aby kouzelná hůlka věděla, co podstatné jméno část
znamená, musí vyhodnotit kouzelnou větu (substring slovo 2 (string-length slovo))
, pro jejíž vyhodnocení potřebuje znát podstatné jméno slovo
.
Místo let
je proto potřeba použít let*
. let*
je sloveso kouzelného jazyka, které je hodně podobné let
, jen o trochu lépe umí pojmenovat více věcí najednou – následující slova, například část
, mohou záviset na těch předchozích, v tomto případě na slovo
:
(let* ((slovo "Neprogramátor")
(část (substring slovo 2 (string-length slovo))))
(string-append "Délka slova " část " je "
(number->string (string-length část))))
Nová slova, která si kouzelná hůlka zapamatuje
editovatKdyž čaroděj kouzelné hůlce předá kouzelnou větu
(let ((délka 20)
(šířka 10)
(výška 2))
(+ (* 2 (* délka šířka))
(* délka výška) (* šířka výška)
(* délka výška) (* šířka výška)))
kouzelná hůlka ji vykoná a výsledek vrátí čaroději. Kdyby se pak čaroděj kouzelné hůlky zeptal, kolik že je délka
, kouzelná hůlka by nevěděla. Čaroděj kouzelnou hůlku nové slovo naučil jen na chvilku.
Aby si kouzelná hůlka nové slovo zapamatovala, vysvětlí jej čaroděj kouzelné hůlce v kouzelné větě, která začíná slovesem define
. O trápení s balením krabice tak může čaroděj s hůlkou sdílet nejednu větu:
(define délka 20)
(define šířka 10)
(define výška 2)
(+ (* 2 (* délka šířka))
(* délka výška) (* šířka výška)
(* délka výška) (* šířka výška))
Vzápětí se pak může zeptat na délku stuhy a kouzelná hůlka už bude vědět:
(+ (* 2 délka) (* 2 šířka) (* 4 výška))
Jak by vypadaly věty o druhé krabici?
(define délka 13)
(define šířka 17)
(define výška 6.5)
(+ (* 2 (* délka šířka))
(* délka výška) (* šířka výška)
(* délka výška) (* šířka výška))
(+ (* 2 délka) (* 2 šířka) (* 4 výška))
Čaroděj může kouzelnou hůlku naučit jména i pro ostatní typy podstatných jmen, třeba pro text.
Kolik a jaké věty jsou potřeba při použití define
v následující kouzelné větě?
(string-append "Délka slova " "Neprogramátor" " je "
(number->string (string-length "Neprogramátor")))
Dvě.
(define slovo "Neprogramátor")
(string-append "Délka slova " slovo " je "
(number->string (string-length slovo)))
A v této?
(substring "Neprogramátor" 2 (string-length "Neprogramátor"))
Také dvě.
(define slovo "Neprogramátor")
(substring slovo 2 (string-length slovo))
Nakonec zase zbývá kouzelná kombinace dvou předchozích vět. Víme, že při použití let*
mocná kouzelná věta zní:
(let* ((slovo "Neprogramátor")
(část (substring slovo 2 (string-length slovo))))
(string-append "Délka slova " část " je "
(number->string (string-length část))))
Kolik a jaké věty s define
mohou tuto mocnou kouzelnou větu nahradit?
Tři.
(define slovo "Neprogramátor")
(define část (substring slovo 2 (string-length slovo)))
(string-append "Délka slova " část " je "
(number->string (string-length část)))
Slovníček kouzelného jazyka
editovatSlovesa let
a let*
slouží čaroději pro dočasné pojmenování informací v jedné větě.
Slovesem define
čaroděj naučí kouzelnou hůlku novou informaci, kterou si kouzelná hůlka zapamatuje.
◄ Neprogramátor/Podstatná jména: primitivní datové typy | Pojmenování informací: definice proměnných | Neprogramátor/Vykonat či nevykonat: predikáty a podmínkové výrazy ► |