|
|||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
OCaml (Objective Caml) to obiektowy funkcyjny język programowania, który istnieje w wersji zarówno interpretowanej jak i kompilowanej, przy czym kompilowany Ocaml to jeden z najszybszych języków funkcyjnych. OCaml jest tworzony przede wszystkim we francuskim akademickim instytucie badawczym INRIA od 1985 roku. Jest dostępny na licencji LGPL. Ocaml jest statycznie typizowany z inferencją typów. Do Ocamla jest dość dużo bibliotek oraz istnieje ogromna liczba rozszerzeń i programów pomocniczych, takich jak:
Programy napisane w Ocamlu zajmują czołowe miejsca w ICFP Programming Contest. Podobnym językiem jest SML.
edytuj Używanie Ocamla z poziomu powłokiUwaga: Informacje te odnoszą się do systemów uniksowych. W innych systemach pewne rzeczy należy wykonywać inaczej. Pliki źródłowe ocamla mają rozszerzenie ml, pliki z sygnaturami - odpowiednik plików nagłówkowych w C - rozszerzenie mli. Nie ma tu jednak żadnego preprocesora i literalnego włączania nagłówków - pliki sygnaturowe są najzwyczajniej kompilowane. Zwykle nie ma potrzeby tworzenia osobnych plików sygnaturowych i Ocaml automatycznie generuje sygnatury na podstawie plików ml. Istnieją trzy sposoby wykonywania programów ocamlowych:
W wyniku działania kompilatorów Ocamla powstają pliki:
edytuj System typówSystem typów opiera się na typach bazowych takich jak: edytuj intCzyli liczby całkowite. Operacje na nich to m.in. +, -, *, /. let x = 2 + 2 * 2;; print_int x;; edytuj floatLiczby zmiennoprzecinkowe mają osobny zestaw operacji, co zmniejsza znacznie czytelność, ale jest konieczne ze względu na sposób działania systemu inferencji typów. Operacje te zwykle kończą się kropką, np. +., -., *., /.. let y = 2.0 +. 2.0 *. 2.0;; print_float y;; edytuj charPojedyncze znaki umieszcza się w pojedynczym cudzysłowie: let c = '\n';; print_char c;; Do zamieniania znaków na ich wartości numeryczne i na odwrót służą int_of_char oraz char_of_int. edytuj stringŁańcuchy tekstowe umieszcza się w podwójnym cudzysłowie: let s = "Ala ma kota\n";; print_string s;; edytuj boolWartości logiczne - true i false. Operacje to not, ||, && itd. edytuj unitTyp pusty, wartość tylko (). Oraz na typach pochodnych takich jak: edytuj Listy elementów danego typuLista elementów danego typu to 'a list, np. [1; 2; 3] to lista typu int list, a [2.71; 3.14; 6.28] to lista typu float list. edytuj KrotkaKrotka to zestaw ustalonej liczby wartości o przyporządkowanych im na stałe, lecz niekoniecznie tych samych, typach zmiennych. Krotką jest np. para 2, "napis", czy trójka 3, 2, 3.14. edytuj AlternatywyAlternatywa to zestaw konstruktorów, które mogą być parametryzowane (wtedy typ ma podwartości równe wszystkim możliwym wartościom parametru) bądź też nie (istnieje tylko jedna wartość z takim konstruktorem). Jeśli potrzebny jest konstruktor, który przyjmuje więcej niż jeden parametr, używa się krotki. Na przykład zdefiniujmy typ foo mający dwa konstruktory - Foo o parametrze int i Bar o parametrze string: type foo = Foo of int | Bar of string;; let print_foo = function Foo n -> print_int n | Bar s -> print_string s ;; print_foo (Foo 2);; print_foo (Bar "Napis") Przykładem predefiniowanej polimorficznej alternatywy jest typ 'a option. Np. dla typu int option poprawnymi wartościami są None i Some 4. edytuj Przykładowy kod(* komentarz *) let rec fib n = if n < 2 then n elsel fib (n-1) + fib (n-2) ;; print_string "Hello, world !\n";; print_int (fib (2+2*2));; print_newline ();; edytuj Zobacz teżedytuj Linki zewnętrzne |
| All Right Reserved © 2007, Designed by Stylish Blog. |