Symbolický výraz

  • Jde o jednoduchý výraz (atom) nebo složený výraz (seznam)

Jednoduchý výraz (atom)

  • Jde o číslo (10, -5, 4.9999D0) nebo symbol (posloupnost písmen/čísel/znaků) nebo literál

Složený výraz (seznam)

  • Posloupnost jednoho nebo více výrazů (prvky složeného výrazu), které jsou odděleny mezerami
  • (+ 1 2), (+). (1 2 3)

Terminologie složeného výrazu

Operátor … co se má udělat Operandy … s čím se to má udělat

  • Lisp důsledně používá prefixovou notaci

Vyhodnocení symbolických výrazů v Lispu

  • Když symbolický výraz napíšeme do Listeneru a dostaname výsledek tak mu říkáme hodnota symbolického výrazu
    • je hodnotou symbolického výrazu `(/ (- 5 3) (+ 5 3))
  • Přesně popsanému procesu, který vede v této hodnotě říkáme vyhodnocovací proces

Vyhodnocovací proces

Vyhodnocení výrazu

  1. Je-li symbol, výsledkem je hodnota symbolu
  2. Je-li jiný atom než symbol, výsledkem je
  3. Je-li seznam s operátorem a operandy , pak
  • jestliže je speciální operátor, vyhodnotí se podle jeho pravidel
  • jestliže je název makra, se expanduje podle pravidel makra a výsledný výraz se vyhodnotí v prostředí
  • jinak musí být symbol se zjistí hodnota funkční vazby symbolu v prostředí
  • zjistí se hodnoty argumentů v prostředí (opět vyhodnocovací proces)
  • výsledkem je výsledek aplikace funkce na hodnoty (aplikace může mít vedlejší efekt)
  • Symbol může sloužit jako jméno pro hodnotu (např. pi pro ) a říkáme mu proměnná
    • Říkáme, že symbol je na hodnotu navázán
    • Hodnota se vždy hledá v aktuálním prostředí, při neúspěchu se postupuje o úrovně výš

Funkce v Lispu

  • Ucelená část programu obsahující výpočet
  • Hodnoty použité při aplikaci funkce jsou argumenty
  • Aplikace funkce = spuštění kódu
  • Používáme jako abstrakci (vyšší srozumitelnost, snadnější změny, snížení chybovosti, …)
  • Funkce si pamatuje prostředí svého vzniku a tím pádem ji můžeme nazvat lexikální uzávěr (kromě toho i seznam parametrů a tělo)
  • Funkce bez názvu … anonymní funkce (operátor lambda)

lambda výraz ( -výraz)

Predikát

  • Funkce, která jako výsledek vrací jednu z pravdivostních hodnot (t nebo nil)

Speciální operátory

  • Operátor pro který neplatí standardní (zjednodušený) vyhodnocovací proces a mají svůj vlastní
  • Např. if, setf

Prostředí a vazby

  • Symbol může mít více vazeb (jedna je vždy aktuální)
  • Máme 2 typy vazeb
    1. hodnotová
    2. funkční
  • Každá vazba má hodnotu (hodnota symbolu = hodnota aktuální vazby)
  • Vazby jsou organizovány v prostředí (znázornění pomocí tabulky)

Operátor let

  • Slouží k explicitnímu vytvoření nového prostředí.
  • Operátor labels vytváří prostředí s funkčními vazbami symbolů

Datová struktura

Zajišťuje nám datovou abstrakci. Pracujeme s ní pomocí: konsturktorů, selektorů, mutátorů. Mutátory nejsou přípustné ve funkcionálním programování.

Vedlejší efekt

Může nastat při vyhodnocení výrazu, pokud kromě vrácení hodnoty výrazu je způsobena ještě nějaká vnější změna.

interní vedlejší efekt … např. mutace hodnoty v datové struktuře externí vedlejší efekt … není možné zpětně programem zjistit (např. tiskový výstup)

  • literál … textový řetězec zadaný přímo ve zdrojovém kódu