Programowanie funkcyjne/Scheme
Wstęp
W dotychczasowych wykładach poznawaliśmy i używaliśmy języka Ocaml. Ocaml (Objective Caml) to dialekt języka ML. Wśród dialektów ML-a jest to język bogaty, ze względu na to, że zawiera:
- bogaty zestaw bibliotek,
- programowanie obiektowe,
- system modułów i funktorów, wraz z funktorami wyższych rzędów.
Tak jak inne dialekty ML-a, Ocaml charakteryzuje się:
- ścisłą statyczną kontrolą typów,
- polimorfizmem, oraz
- tym, że zawiera konstrukcje imperatywne.
W tym i kolejnym wykładzie zobaczymy przedstawicieli innych rodzin funkcyjnych języków programowania. W tym wykładzie poznamy język Scheme -- dialekt Lispu.
Kombinacje i wyrażenia
Podstawową konstrukcją składniową w Scheme'ie jest kombinacja. Jest to sekwencja wartości ujętych w nawiasy. Pierwsza z tych wartości musi być procedurą. Kolejne wartości stanowią argumenty. Obliczenie wartości kombinacji polega na wywołaniu procedury będącej pierwszym elementem kombinacji i zastosowaniu jej do pozostałych elementów kombinacji.
Wyrażenia, nazywane również S-wyrażeniami, budujemy używając kombinacji, nazwanych wartości i stałych.
<wyrażenie> ::= <stała> | <kombinacja>
<kombinacja> ::= ( { <wyrażenie> }+ )
<stała> ::= <identyfikator> | <liczba> | ...
42
(+ 36 6)
\textsl{- : int = 42}
~~
3 * 14;;
\textsl{- : int = 42}
~~
100 - 58;;
\textsl{- : int = 42}
~~
1 * 2 * 3 * 4 * 5 - ((6 + 7) * 8 * 9 / 12);;
\textsl{- : int = 42}
~~
silnia 7 / silnia 5;;
\textsl{- : int = 42}
~~
596.4 /. 14.2;;
\textsl{- : float = 42.}