JUI - 1. predn - PowerPoint PPT Presentation

1 / 11
About This Presentation
Title:

JUI - 1. predn

Description:

JUI - 1. p edn ka Funkcion ln programov n vod do jazyka Lisp RNDr. Ji Dvo k, CSc. dvorak_at_uai.fme.vutbr.cz – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 12
Provided by: JirD155
Category:
Tags: jui | lisp | predn

less

Transcript and Presenter's Notes

Title: JUI - 1. predn


1
JUI - 1. prednáška Funkcionální programování
Úvod do jazyka Lisp
  • RNDr. Jirí Dvorák, CSc.
  • dvorak_at_uai.fme.vutbr.cz

2
Principy funkcionálního programování
  • Funkcionální program se vytvárí jako souhrn
    definic funkcí a jejich aplikací ve forme výrazu.
    Jedná se o to, jak vyjádrit daný algoritmus
    pomocí vzájemne provázaných (zpravidla
    rekurzivních) funkcí.
  • Výpocet podle takového programu lze chápat jako
    provedení aplikace nejaké funkce na urcitou sadu
    hodnot jejích argumentu, jehož smyslem je získat
    výslednou hodnotu. Pocítac má ve funkcionálním
    programování roli vyhodnocovace výrazu. Základním
    krokem vyhodnocení je pritom zjednodušení
    (redukce) výrazu.
  • Výsledek výpoctu je do znacné míry nezávislý na
    poradí, v nemž se redukují jednotlivé dílcí
    výrazy. To umožnuje snížení rizika možných chyb
    programování, a vyústuje napr. do úvah o
    paralelním provádení redukcních transformací na
    pocítacích, jejichž technická realizace už nemusí
    vycházet z von Neumannova modelu.

3
Pocítac jako vyhodnocovac výrazu
Definice
Výrazy
Vyhodnocení
Prostredí
Výsledky
4
Rekurze
  • V neimperativním programovacím stylu je rekurze
    duležitým nástrojem pro rešení složitých
    problému.
  • Taxonomie rekurzivních definic (pro funkcionální
    styl)
  • Vnorená rekurze - rekurzivní volání funkce
    obsahuje v argumentech volání téže funkce.
  • Kaskádní (stromová) rekurze - ve stejném výrazu
    se objevuje nekolik rekurzivních volání, ale bez
    vzájemného vnorení.
  • Lineární rekurze - v každé z alternativ v
    definici funkce se vyskytuje nejvýše jedno její
    rekurzivní volání.
  • Koncová rekurze - speciální prípad lineární
    rekurze, kdy rekurzivní volání je poslední
    operací príslušné alternativy definice.

5
Historie jazyka Lisp
  • Jazyk Lisp je jedním z nejstarších dosud
    používaných programovacích jazyku. Puvodne vznikl
    koncem 50. let (Mc Carthy, 1960) jako urcitá
    notace pro zápis algoritmu pracujících se seznamy
    (LISP LISt Processing).
  • Další verze jazyka Lisp
  • Lisp 1.5 (Mc. Carthy, 1962), MacLisp (1974),
  • InterLisp (1978), Franz Lisp, Zeta Lisp, Scheme,
  • Common Lisp (1984), Xlisp (1986)

6
Typy dat
  • Souhrnne se data v Lispu nazývají S-výrazy
    (symbolické výrazy).
  • Jednoduché typy dat - atomy
  • císelné celocíselné, reálné
  • symbolické speciální znaky, identifikátory
    (mohou obsahovat písmena, císlice, pomlcku a
    podtržítko obvykle se nerozlišují velká a malá
    písmena).
  • Strukturované typy dat
  • tecka-dvojice
  • seznam (speciální prípad tecky-dvojice ve
    zkrácené notaci)

7
Tecka-dvojice
  • Tecka-dvojice
  • (S-výraz1.S-výraz2)
  • Tecka-dvojice predstavuje binární strom, kde
    S-výraz1 odpovídá levému podstromu a S-výraz2
    pravému podstromu.
  • Tecka-dvojice je fyzicky reprezentována základní
    lispovskou bunkou (tzv. cons-bunkou), delenou na
    2 cásti, které obsahují ukazatele na príslušné
    podvýrazy. Názvy techto cástí jsou dány
    historicky (oznacují cásti strojového slova na
    pocítaci IBM 1040 kde byl Lisp poprvé
    implementován).

address part
decrement part
S-výraz1
S-výraz2
8
Seznam
  • Seznam
  • (S-výraz1 S-výraz2 S-výrazN)
  • Seznam je tvoren posloupností S-výrazu
    oddelených mezerami a uzavrených do kulatých
    závorek.
  • Zápis seznamu v podobe tecky-dvojice
  • (S-výraz1.(S-výraz2.( .(S-výrazN.nil) )))
  • Atom nil je speciální atom, který reprezentuje
    konec seznamu.
  • Fyzická implementace seznamu


S-výraz1
S-výraz2
S-výrazN
9
Struktura programu
  • Program v Lispu se skládá z tzv. forem.
  • Forma (E-výraz) je S-výraz, který lze vyhodnotit
    lispovským interpretem.
  • Program je tedy posloupností vyhodnotitelných
    S-výrazu, což znamená, že program má stejný
    charakter jako jím zpracovávaná data.
  • Typy forem
  • císelný atom
  • symbolický atom (identifikátor)
  • zápis funkce

10
Atomické formy
  • Císelný atom
  • Vyhodnocením se získá císlo vyjádrené zápisem
    atomu.
  • Symbolický atom (identifikátor)
  • Je považován za promennou a jeho vyhodnocením se
    získá hodnota, která je v daném okamžiku vázána
    na daný atom. Pokud v okamžiku vyhodnocení není
    na daný atom žádná hodnota navázána, je
    signalizována chyba.
  • Promenné se standardne prirazenou hodnotou
  • T hodnota je T (true)
  • NIL hodnota je NIL
  • F hodnota je NIL
  • Pozn. platí konvence, že jakákoli hodnota ruzná
    od NIL vyjadruje pravdivostní hodnotu true.

11
Zápis funkce
  • Zápis funkce (presneji zápis aplikace funkce) má
    tvar seznamu vytvoreného podle následujícího
    schématu
  • (f a1 a2 an)
  • kde f je jméno (atom) vyjadrující funkci a a1,
    a2, , an jsou formy vyjadrující argumenty, na
    než se má funkce f aplikovat.
  • Pro zápis funkce se v Lispu používá dusledne
    prefixová notace, pricemž se celý zápis uzavírá
    vždy do závorek.
  • Pri vyhodnocení zápisu funkce Lisp nejprve
    vyhodnotí všechny argumenty a teprve na získané
    hodnoty aplikuje funkci f. Poradí vyhodnocování
    argumentu není v Lispu presne specifikováno.
  • Výjimkou z tohoto pravidla jsou speciální funkce,
    z nichž každá má specifická pravidla pro
    vyhodnocení (resp. nevyhodnocení) argumentu.
    Zápisy techto funkcí se nazývají speciální formy.
Write a Comment
User Comments (0)
About PowerShow.com