Hlavní navigace

Scheme: kostlivec ve skřini nebo nehasnoucí hvězda?

Jakub Šťastný

Funkcionální jazyky jsou tu s námi již mnoho a mnoho desítek let. Ačkoliv se sami do běžné praxe zas až tak nedostaly, ovlivnily ostatní programovací jazyky zcela fundamentálním způsobem. Jedním z nich je i oblíbené Scheme. Jak se v něm píše? Může mi být něčím prospěšné?

Za námět na článek i cenné rady bych rád poděkoval Jakubu Hegenbartovi (Kyosuke).

Znáte Scheme?

Scheme je dialekt programovacího jazyku Lisp. Jo, to je „ta věc s těma závorkama“, přesně tak. Kromě poněkud nezvyklé syntaxe Lisp a tedy také Scheme disponuje i jinými, mnohdy velmi zajímavými a užitečnými možnostmi. Pojďme se s nimi seznámit.

Pár slov nejprve o Lispu …

Rodina lispových jazyků patří do skupiny tzv. funkcionálních jazyků. Ty jsou podmnožinou tzv. deklarativních programovacích jazyků, tedy jazyků, v nichž se programátor snaží vyjádřit, co se má udělat, a ne jak se to má udělat (viz WikiPedie). Kromě Lispu patří do deklarativních jazyků ještě například SQL, do podskupiny funkcionálních programovacích jazyků pak ještě například Haskell a Prolog.

Vlastní název Lisp pochází z List Processing, tedy zpracování seznamů, které jsou v Lispu alfou i omegou téměř všeho. Zlí jazykové však tvrdí, že to není pravda, že zkratka Lisp prý pochází z „Lots of Insanely Stupid Parenthesis“, ale to jim jistě nebudete věřit…

Počátky Lispu sahají do dávné počítačové historie, téměř až informatického pravěku – na svět totiž Lisp přišel již roku 1958, vyvinut byl pro účely programování umělé inteligence. Lisp ale našel mnohem širší použití než „jen“ při programování AI, vzpomeňme například Emacs, AutoCAD, hra Abuse, prohlížeč fraktálů XaoS a další.

Nechme ale nyní Lisp Lispem, pokud vás zajímá více, můžete si přečíst jemný úvod do Lispu nebo lispová makra, případně skočit na WikiPedii či LinuxExpres, my se budeme věnovat Scheme.

… a samozřejmě také o Scheme

Scheme je oproti Common Lispu mnohem více akademické, snaží se o co největší čistotu a poskytuje poměrně malé množství konstrukcí, na jejichž základě se staví zbytek. Spíše akademické využití dokládá také fakt, že Scheme až tolik nestaví na rychlosti, i když pravdou je, že i pro Scheme existují velmi rychlé kompilátory a interpretery, jak si ostatně povíme za chvilku.

S trochou nadsázky lze Scheme nazvat „jazykem na psaní jazyků“. Nejenže napsání interpreteru Scheme ve Scheme bývá jedním z nejčastějších úkolů při výuce Scheme na vysoké škole, ale je to také velmi lehké – lze to zvládnout doslova za chvilku. Ve Scheme lze snadno napsat nejenom pouze Scheme samotné, ale skvěle se v něm píší interpretery či kompilátory spousty dalších jazyků.

DrScheme

Vývojové prostředí DrScheme.

Žije to vůbec ještě?

Ačkoliv Scheme není využívané tak často jako Common Lisp, rozhodně má i v dnešním světě své místo na slunci. To platí především ve školství, protože velká spousta škol ve Scheme vyučuje, nicméně tu a tam se používá i v některých projektech.

Vývoj Scheme je pořád živý, jeho specifikace se vždy po několika letech aktualizuje. Poslední dosti pokroková R6RS vzbudila ostrou diskusi, takže o živosti jazyka myslím nemůže být pochyb.

Implementace

Scheme je k mání ve velké spoustě implementací, dokonce si můžete vybrat, zda je libo Scheme interpretovat či kompilovat do binárního kódu, to není problém.

Pokud si chcete Scheme nejprve prostě jenom vyzkoušet, možná nejlépe uděláte, když si nainstalujete vývojové prostředí DrScheme, které vám dodá jak interpret Scheme, tak cokoliv ostatního, co budete pro začátek potřebovat. Pokud se vám Scheme zalíbí, možná dáte raději přednost Emacsu, který, když se doplní o pár balíčků maker, je na vývoj lispových a schemových programů opravdu k nezaplacení.

Z interpretrů rozhodně stojí za zmínku Gauche Scheme, z kompilátorů zmíním alespoň Stalin, který se pyšní pozoruhodnou rychlostí – bez nadsázky lze říct, že ani binárka, která vyleze z kódu v jazyce C, nebude s velkou pravděpodobností tak rychlá jako binárka, která vyleze ze Stalina, a to i přesto, že Stalin překládá do zdrojového kódu pomocí překladu do C s teprve následnou kompilací.

Hello World

Abych pořád jen nekecal, pojďme si také ukázat nějaký ten kus kódu. Začněme obligátním Hello Worldíkem:

(display "Hello World!")

Scheme používá tzv. prefixovou notaci, což znamená, že funkce je napsána na první místo, teprve potom následují její argumenty. Na výše uvedeném příkladě to vypadá poměrně přirozeně, u aritmetiky by nás to však mohlo překvapit:

(+ 1 2 3 4 5)

Protože Scheme se doslova vyžívá v rekurzi, ukážeme si její použití na příkladě faktoriálu:

; factorial
(define (factorial n)
  (if (= n 1)
      1
      (* n (factorial (- n 1)))))

Závěr

Scheme, ačkoliv dnes není příliš rozšířené, je velmi zajímavý jazyk, který by rozhodně neměl upadnout v zapomnění. Myslím si také, že každý, kdo se opravdu zajímá o programování, by měl k funkcionálním jazykům alespoň přičichnout. Funkcionální jazyky naučí člověka uvažovat o psaní programů zase trochu jiným způsobem, což mu samozřejmě rozšíří jeho vývojářské obzory. Mě osobně Scheme zaujalo. Co na něj říkáte vy?

Odkazy

Anketa

Má Scheme i v dnešní době jiný než edukativní význam?

Našli jste v článku chybu?

29. 10. 2011 19:56

kubriel (neregistrovaný)

v scheme sa kodi vo fluxuse. je to live coding enviroment na realtime renderovanu grafiku
http://www.pawfal.org/fluxus/


16. 12. 2007 22:54

jard (neregistrovaný)
Mozem sa spytat, ktore su tie dobre optimalizujuce kompilatory ?
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

DigiZone.cz: Test Philips 24PFS5231 s Bluetooth repro

Test Philips 24PFS5231 s Bluetooth repro

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru