Portál AbcLinuxu, 16. května 2024 02:29

Úvod do Scheme

21. 9. 2007 | David Kolibáč
Články - Úvod do Scheme  

Scheme je oblíbený výukový programovací jazyk. Učí se v něm programovat například studenti Bostonské univerzity, MIT, Rice University, ... a také Univerzity Palackého v Olomouci. Pojďte se jej naučit i vy.

Okénko do historie

V polovině sedmdesátých let minulého století měli pánové G. Sussman a G. Steele z MIT potřebu osahat si v praxi Hewittovu teorii aktorů. Žádný z tehdejších programovacích jazyků jim nebyl dost dobrý, a proto se rozhodli pro vytvoření jazyka vlastního. Implementovali jej v LISPu a pojmenovali Schemer, tedy podle vzoru pro pojmenovávání jazyků pro umělou inteligenci (Planner, Conniver). Jelikož ale jimi používaný operační systém ITS omezoval délku názvu adresáře na pouhých šest znaků, ustálil se název Scheme. Veřejnosti byl Scheme představeno prostřednictvím publikací Scheme: an interpreter for extended lambda calculus, LAMBDA: The Ultimate ImperativeLAMBDA: The Ultimate Declarative. Nově vzniklý jazyk neměl být cílem, nýbrž prostředkem, a tudíž byla jeho specifikace velmi přímočará. Standard jazyka byl definován v roce 1978 v dokumentu Revidovaná zpráva o Scheme, dialektu LISPu a jednou za čas je aktualizován prostřednictvím padesátistránkového textu Revize revize reportu Scheme, aneb neobvyklý LISP, kde se s každou aktualizací zvyšuje počet slov "revize". Současným standardem je R5RS a blíží se R6RS.

Stručně o Scheme

Scheme je, jak již bylo zmíněno, dialektem jazyka LISP. To jej předurčuje k funkcionální orientaci a také k přeplněnosti závorkami; však se říká, že LISP je zkratkou z "Lost In Stupid Parentheses" ("Ztracen v pitomých závorkách").

Základem všeho jsou seznamy a ty se dále vyhodnocují..., ale o tom až v příštím díle tohoto seriálu.

Scheme je jazyk silně a dynamicky typovaný. To znamená, že překladač nepovolí přiřazení nesprávné hodnoty (je vyžadováno explicitní přetypování) a také není nutno deklarovat proměnné.

Proč se to mám učit?

Scheme je velmi jednoduchý jazyk (vždyť standard má pouhých 50 stran, viz výše). V praxi se téměř nepoužívá (čestnými výjímkami jsou skriptovací jazyk v GIMPu a Scheme Shell -- SCSH), což je skvělé pro výuku, neboť není nutné zabývat se technickými detaily důležitými právě pro praxi (jako je tomu třeba u C++). Díky akademickému původu se ve Scheme snadno navrhují algoritmy. Pro úplnost dodávám seznam škol, na nichž se Scheme vyučuje.

Implementace

Existuje celá řada překladačů Scheme, většinou se jedná o interaktivní interprety. Liší se od sebe až ve složitějších záležitostech, proto je v podstatě jedno, který si vyberete. Doporučuji vývojové prostředí DrScheme, které využívá překladač PLT Scheme.

Jak ten interpret funguje?

Řekněme, že mám nainstalované PLT Scheme a chci jej spustit:

mzscheme
Welcome to MzScheme version 360, Copyright (c) 2004-2006 PLT Scheme Inc.
>

Na posledním řádku vidíme výzvu, do té můžeme něco napsat:

> 1 + 1
1
> #<primitive:+>
> 1
>

Čekali bychom, že se vyhodnotí zadaný výraz, ale stalo se cosi podivného. Může za to fakt, že Scheme má syntaxi založenou na LISPu, a tudíž by daný výraz měl vypadat poněkud jinak. O tom ovšem až příště.

Interpret ukončíte stisknutím znaku konce souboru, tedy Ctrl + D.

Příště...

V příštím článku o Scheme si ukážeme, jak se vyhodnocují výrazy, a seznámíme se s proměnnými a procedurami.

Pokračování by měla být celkem dvě. V druhém díle budou zahrnuty podmínky a také rekurze, ve třetím pak tečkové páry. Pokud máte zájem o hlubší studium jazyka Scheme, přečtěte si standard R5RS nebo povedená skripta Univerzity Palackého.

Související články

Seriál: Jazyky a překladače
Seriál: Ruby pro začátečníky
Seriál: Standardní knihovna pro Python
Emacs - jak začít
Jaderné noviny: LISP interpretr v kernelu

Další články z této rubriky

LLVM a Clang – více než dobrá náhrada za GCC
Ze 4 s na 0,9 s – programovací jazyk Vala v praxi
Reverzujeme ovladače pro USB HID zařízení
Linux: systémové volání splice()
Programování v jazyce Vala - základní prvky jazyka

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.