Přeskočit na obsah

Neprogramátor/Pojmenování informací: definice proměnných

Z Wikiknih

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ě

[editovat | editovat zdroj]

Jedno 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á.

(+ (* 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 10
  • výš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 dlouhé je kouzelné podstatné jméno "Neprogramátor"? A co když přeskočím první dvě písmenka?

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

[editovat | editovat zdroj]

Když č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

[editovat | editovat zdroj]

Slovesa 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 ►