Linux E X P R E S

Facebook

Scheme

Lukáš Faltýnek představí Scheme, jeden z dialektů jazyka Lisp, o kterém psal v jednom z minulých článků .


Scheme je velmi jednoduchý jazyk a jak se říká, dá se naučit i během několika hodin. Vždyť celá specifikace jazyka má kolem 50 stránek. Srovnáme-li to s LISPem, který jich má pře 1000, je to skutečně málo.

Na počátku zrodu jazyka Scheme stála potřeba Guye Steela a Geralda Sussmana z MIT (Massachussetský technický institut), vyzkoušet si některé aspekty modelu aktorů, který v roce 1973 veřejnosti představil Carl Hewitt. Protože LISP se k tomuto příliš nehodil, bylo potřeba navrhnout nový jazyk. Ten byl nakonec implementován v LISPu. A dokonce i syntaxí LISP hodně připomínal. Byl však o dost jednodušší, a odstraňoval některé z nepříjemných vlastností LISPu.

Protože autoři z počátku o navrhovaném jazyku smýšleli jako o pouhém prostředku, k vyřešení jejich úlohy, byl jazyk velmi jednoduchý. Jak se ale po chvíli ukázalo, jeho jednoduchost byla kladem. A v jazyce se velmi rychle dali napsat prototypy rozsáhlých projektů.

Původní název jazyka byl Schemer. Po vzoru dobových jazyků pro umělou inteligenci Planner a Conniver. Protože však autoři používali operační systém ITS, který limitoval délku souborů a adresářů šesti znaky, byly vždy soubory pro Schemer uloženy v adresáři Scheme. Z tohoto název Scheme, který tak nahradil Schemer.

Poprvé byl jazyk Scheme veřejně popsán v roce 1975 v práci Sussmana a Steela " Scheme: an interpreter for extended lambda calculus". V roce 1976 pak Sussman a Steele napsali dvě publikace ""LAMBDA: The Ultimate Imperative" a "LAMBDA: The Ultimate Declarative", v nichž popsali, jak řešit běžné programové konstrukce.

V roce 1978 byl jazyk Scheme standardizován. Základem se stala "Revidovaná zpráva o Scheme - dialektu LISPu. Tato zprava popisovala vývoj jazyka, poté co byla MIT implementace rozšířena o podporu inovativního kompileru. Další zpráva, která byla nazvána "Revize revize reportu Scheme, neboli neobvyklý LISP" byla publikována v roce 1985. Tradice revizi revize revize se zachovala a dnes je jiz na světě poslední pátá revize z února roku 1998.

K tomu, aby se člověk jazyk naučil, je potřeba kvalitní literaturu. Česká skripta od Davida Skoupila vhodnou knihou jsou. A tak je každému zájemci o Scheme doporučuji k přečtení.

Implementací Scheme existuje mnoho. A jak to již bývá existují implementace jak komerční, tak nekomerční. Bohužel mnoho jsem jich nezkoušel. Pro Linux bych doporučil QScheme, které je zdarma. Vyhovuje poslední páté revizi jazyka a má rozhraní pro knihovnu GTK. Jako multiplatformní implementaci bych pak doporučil DrScheme.

Základem jazyka Scheme jsou tečkové páry. Tečkový pár vypadá např. takto (1 . 2) a může například reprezentovat 2D souřadnice, imaginární číslo, nebo české a cizí slovo ve slovníku. Stejně jak tomu bylo u LISPu, tak se první část nazývá CAR a druhá CDR. Zacházení se seznamy je pak ve Scheme podobné jak v LISPu.

Scheme nerozlišuje mezi funkcí a hodnotou. Funkce může být vytvořena i třeba během výpočtu. Funkce vzniká vyhodnocením lambda kalkulu (výrazu). Pro nadefinování funkce pro více použití se používá speciální forma define. Cykly ve Scheme neexistují a jejich úlohu přebírá použití rekurze. Typickým příkladem rekurze je níže v příkladu uvedený výpočet faktoriálu.

Po zvládnutích těchto skript by vám neměl dělat žádný problém ani rozšiřující jazyk Skript-fu, který naleznete v GIMPu.

Pro vyhodnocování podmínek nabízí Scheme tři speciální formy. If, case a cond. If se až na formu zápisu nijak neliší od if, které používá většina ostatních jazyků. Forma cond dovoluje použít libovolné množství podmínek a návratovou hodnotu pro každou z nich. Forma case je podobná formě cond postupně vyhodnocuje seznamy a pokud nalezne odpovídající prvek, vrátí jeho příslušnou hodnotu. Slíbené příklady tradiční Hello World a faktoriál mohou ve Scheme vypadat takto.

Ukázka programu Hello, World!: 
(define (hello-world)
(display "Hello, World!")
(newline))
Program faktoriál
(define (fakt n)
(if (= n 0) 1
(* n (fakt (- n 1)))))

S praktickým využitím jazyka Scheme se dnes setkáme převážně na mnoha středních a vysokých školách. Další použití nachází jako rozšiřující jazyk v grafickém nástroji GIMP (script-fu) nebo textovém editoru Emacs.

Diskuze (2) Nahoru