OCaml | это... Что такое OCaml? (original) (raw)

Objective Caml

Caml.128x58.gif
Семантика: мультипарадигменный: функциональный, объектно-ориентированный, императивный
Автор(ы): INRIA
Релиз: 4.00.1 (5 октября 2012)
Типизация данных: строгая, статическая
Диалекты: F#, JoCaml, MetaOCaml, OcamlP3l
Испытал влияние: Standard ML, Caml Light
Сайт: caml.inria.fr

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

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

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

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

Содержание

Примеры исходного текста на OCaml

Запуск интерпретатора OCaml

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

$ ocaml Objective Caml version 3.09.0 #

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

1 + 2 * 3;;

Hello world

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

print_endline "Hello World!"

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

$ ocamlc hello.ml -o hello

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

$ ocamlopt hello.ml -o hello

и запущена:

Вычисление суммы элементов списка

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

let rec sum xs = match xs with | [] -> 0 | x :: xs' -> x + sum xs'

sum [1;2;3;4;5];;

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

let sum xs = List.fold_left (+) 0 xs

sum [1;2;3;4;5];;

Быстрая сортировка

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

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

Примечания

Ссылки

Литература

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

Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч