OCaml

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Objective Caml
Caml.128x58.gif
Семантика:

мультипарадигменный: функциональный, объектно-ориентированный, императивный

Автор(ы):

INRIA

Релиз:

4.01 (12 сентября 2013)

Система типов:

строгая, статическая

Диалекты:

F#, JoCaml, MetaOCaml, OcamlP3l

Испытал влияние:

Standard ML, Caml Light

Лицензия

q1396282?

Сайт:

ocaml.org

OCaml — современный объектно-ориентированный язык функционального программирования общего назначения, который был разработан с учётом безопасности исполнения и надёжности программ. Этот язык имеет высокую степень выразительности, что позволяет его легко выучить и использовать. Язык CaML поддерживает функциональную, императивную и объектно-ориентированную парадигмы программирования. Был разработан в 1985 году во французском институте INRIA, который занимается исследованиями в области информатики. Самый распространённый в практической работе диалект языка ML.

Инструментарий OCaml включает в себя интерпретатор, компилятор в байткод и оптимизирующий компилятор в машинный код, превосходящий по своим параметрам аналогичные компиляторы C/C++ для многих задач [источник не указан 61 день], особенно связанных с синтаксическим анализом и т. п.

На языке OCaml, в частности, написан рендеринг формул Википедии, использующих тег <math>, файлообменный клиент MLDonkey, стек управления гипервизором Xen xapi (является частью Xen Server/Xen Cloud Platform), язык программирования HaXe.

К достоинствам языка относят:

  • строгую типизацию;
  • развитую систему модулей;
  • автоматическую сборку мусора;
  • эффективность;
  • кроссплатформенность.

Примеры исходного текста на OCaml[править | править исходный текст]

Запуск интерпретатора OCaml[править | править исходный текст]

Для запуска интерпретатора языка OCaml необходимо в консоли ввести следующую команду:

$ ocaml
       Objective Caml version 3.09.0
#

Теперь можно вводить различные выражения, которые интерпретатор будет считывать, вычислять и выводить результат на экран:

# 1 + 2 * 3;;
- : int = 7

Hello world[править | править исходный текст]

Следующая программа «hello.ml»:

print_endline "Hello World!"


может быть скомпилирована либо в байт-код:

$ ocamlc hello.ml -o hello

либо в оптимизированный машинный код:

$ ocamlopt hello.ml -o hello

и запущена:

$ ./hello
Hello World!
$

Вычисление суммы элементов списка[править | править исходный текст]

Список является одним из основных типов данных в OCaml. Следующий пример кода определяет рекурсивную (обратите внимание на ключевое слово rec) функцию, которая перебирает элементы данного списка и возвращает их сумму.

let rec sum xs =
  match xs with
    | []       -> 0
    | x :: xs' -> x + sum xs'
 # sum [1;2;3;4;5];;
 - : int = 15

Другой способ подсчета суммы заключается в использовании функции свёртки:

let sum xs =
    List.fold_left (+) 0 xs
 
 
  # sum [1;2;3;4;5];;
  - : int = 15

Быстрая сортировка[править | править исходный текст]

В следующем примере приведен алгоритм быстрой сортировки, который сортирует список в порядке возрастания:

 let rec qsort = function
   | [] -> []
   | pivot :: rest ->
       let is_less x = x < pivot in
       let left, right = List.partition is_less rest in
       qsort left @ [pivot] @ qsort right

Последовательность Фибоначчи[править | править исходный текст]

let rec fib_aux n a b =
  match n with
  | 0 -> a
  | _ -> fib_aux (n - 1) (a + b) a
let fib n = fib_aux n 0 1

Примечания[править | править исходный текст]

Ссылки[править | править исходный текст]

Литература[править | править исходный текст]

Список книг, доступных онлайн