Objective CAML
Реализация языка программирования MLObjective CAML — универсальный язык программирования. Сочетает функциональный и объектно-ориентированный стиль. Также содержит императивные средства.
Это один из самых развитых языков группы ML. Особенности языка: строгая типизация, ориентация синтаксиса на написание безопасных программ. Поддерживается автоматический сборщик мусора, есть стандартный интерфейс к модулям, написанным на C. Один из наиболее практичных функциональных языков программирования. Его реализация содержит много возможностей, не имеющих прямого отношения к “великой функциональной идее”, но необходимых для практического языка программирования:
- компилятор в байт-код (генерирует компактный и достаточно эффективный код)
- компилятор в машинный код для многих платформ (в том числе x86, SPARC, Alpha etc.). Порождаемый транслятором код обладает эффективностью сравнимой с С (различие в скорости как правило от двукратного проигрыша до 3-кратного выигрыша — последнее имеет место за счет более эффективной работы с кучей)
- текстовый отладчик (с функциональностью близкой к GDB)
- Профилятор
- генераторы лексических и синтаксических анализаторов (OCamlLex, OCamlYacc)
- средство, обеспечивающее возможность расширения синтаксиса языка (так называемый Caml PreProcessor-Pretty-Printer = Caml4P), который позволяет описывать практически любые синтаксически модификации исходного языка (в том числе — позволяет полностью переопределить его синтаксис)
Это делает Objective CAML отличной базой для опытов с новыми языковыми конструкциями.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Objective Caml 3.10.2print_endline "Hello, World!"
Числа Фибоначчи:
Пример для версий Objective Caml 3.10.2Используется рекурсивный метод вычисления чисел Фибоначчи.
let rec fibonacci n =
if n < 3 then
1
else
fibonacci (n-1) + fibonacci (n-2)
let () =
for n = 1 to 16 do
Printf.printf "%d, " (fibonacci n)
done;
print_endline "..."
Факториал:
Пример для версий Objective Caml 3.10.2Используется рекурсивное определение факториала. Значения факториалов, начиная с 13!, отрицательны из-за переполнения:
12! = 479001600
13! = -215430144
14! = -868538368
15! = -143173632
16! = -143294464
let rec factorial n =
if n <= 1 then
1
else
factorial (n-1) * n;;
let () =
for n = 0 to 16 do
Printf.printf "%d! = %d\n" n (factorial n)
done;
Факториал:
Пример для версий Objective Caml 3.10.2В этом примере используется вспомогательная функция fact
, позволяющая реализовать хвостовую рекурсию.
let rec fact n accum =
if n <= 1 then
accum
else
fact (n-1) (accum*n);;
let factorial n =
fact n 1;;
let () =
for n = 0 to 16 do
Printf.printf "%d! = %d\n" n (factorial n)
done;
Комментарии
]]>blog comments powered by Disqus
]]>