Scheme
Z Wikipedie, otevřené encyklopedie
Scheme je dialekt funkcionálního programovacího jazyka Lisp. Jazyk navrhli Guy Lewis Steele a Gerald Jay Sussman a jeho první popis byl sepsán v roce 1975. Oproti Lispu se Scheme snaží o minimalismus - poskytovat co nejmenší počet základních funkcí, na nichž jsou pak v knihovnách postaveny složitější konstrukce. Díky tomu má dosud poslední reference jazyka jen 50 stran.
Tento jazyk je pro praxi nepoužitelný, používá se především ve školách pro výuku programování algoritmů.
[editovat] Ukázka kódu
Tradiční program hello world vypadá v jazyce Scheme třeba takto:
(define (hello) (display "Ahoj svete!") (newline)) (hello)
Na prvním řádku začíná definice procedury hello, která vypíše text „Ahoj svete!“ a odřádkuje. Na čtvrtém řádku je pak tato procedura zavolána.
Příkaz define slouží také k definici proměnných:
(define pi 3.14)
Následující příklad ukazuje definici funkce, která vypočítá faktoriál zadaného čísla:
(define fact
(lambda (n)
(if (= n 0)
1
(* n (fact (- n 1))))))
Psaní konstrukce lambda může být zdlouhavé a tak Scheme nabízí zkratku:
(define (fact n)
(if (= n 0)
1
(* n (fact (- n 1)))))
Funkci pak lze zavolat:
(fact 4)
Na výstupu bychom dostali číslo 24. Výše uvedený příklad ukazuje několik zajímavých konstrukcí. Jednak je zřejmé, že v jazyce Scheme se používá prefixového zápisu:
(+ 1 2) ; součet (- 5 3) ; rozdíl (* 4 5) ; součin (/ 9 3) ; podíl (+ 1 3 7) ; není třeba se omezovat na dvě čísla
Druhou zajímavou věcí je podmínka if. Ta má tvar (if (výraz) true false), kde větev true se provede, je-li výraz pravdivý (vyhodnocen jako #t), větev false v případě, že je výraz nepravdivý (#f; ekvivalentní části else v jiných jazycích).
Třetí zajímavou věcí je rekurzivní volání sebe sama na pátém řádku definice funkce. Funkci pro výpočet faktoriálu lze přepsat:
(define (fact n)
(define (iter nn result)
(if (= nn 0)
result
(iter (- nn 1) (* result nn))))
(iter n 1))
V takovém to případě budou všechna rekurzivní volání koncově rekurzivní. Průběžné hodnoty nejsou ukládány na zásobník, ale jsou předávány jako argumenty rekurzivní fce. a interpretr, může zahodit obsah zásobníku a znovu zavolat funkci. Tzn. že výpočet funkce probíhá v konstantní pamětovém prostoru. Standard jazyka Scheme R5RS, přesně definuje, kdy dojde ke koncovému volání.
[editovat] Externí dokazy
- oficiální stránky jazyka Scheme
- www.schemers.org - informace, reference jazyka, …
- Programy a projekty v jazyku Scheme (I, II, III) - výborná česká skripta (učebnice)…
| Programovací jazyky | |||
|
ABAP | Ada | AWK | Assembler | C | C++ | C# | COBOL | ColdFusion | Clean | D | Eiffel | Erlang | Flex | Fortran | JADE | Java | JavaScript | Lisp | Lua | Oberon | Object Pascal | Objective-C | Pascal | Perl | PHP | Python | REALbasic | REBOL | RPG | Ruby | SQL / PL/SQL | Tcl / Tcl/Tk | Visual Basic / VBScript | VB.NET | Visual FoxPro
|

