Programowanie funkcyjne/Scheme: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Kubica (dyskusja | edycje)
Kubica (dyskusja | edycje)
Linia 15: Linia 15:
W tym i kolejnym wykładzie zobaczymy przedstawicieli innych rodzin funkcyjnych języków programowania.  
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.  
W tym wykładzie poznamy język Scheme -- dialekt Lispu.  
Jest to język o bardzo prostej, wręcz minimalistycznej składni.
Tak jak Ocaml, zawiera konstrukcje imperatywne.
Natomiast charakteryzuje się dynamiczną kontrolą typów.
</p>
</p>



Wersja z 21:36, 17 gru 2006

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. Jest to język o bardzo prostej, wręcz minimalistycznej składni. Tak jak Ocaml, zawiera konstrukcje imperatywne. Natomiast charakteryzuje się dynamiczną kontrolą typów.

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.}