OCaml

OCaml - сучасний об'єктно-орієнтований мову функціонального програмування загального призначення, який був розроблений з урахуванням безпеки виконання і надійності програм. Ця мова має високий ступінь виразності, що дозволяє його легко вивчити і використовувати. Мова CaML підтримує функціональну, імперативну та об'єктно-орієнтовану парадигми програмування. Був розроблений в 1985 під французькому інституті INRIA, який займається дослідженнями в області інформатики. Найпоширеніший в практичній роботі діалект мови ML.

Інструментарій OCaml включає в себе інтерпретатор, компілятор в байткод і оптимізуючий компілятор в машинний код, що перевершує за своїми параметрами аналогічні компілятори C / C + + для багатьох завдань, особливо пов'язаних з синтаксичним аналізом і т. п.

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

До достоїнств мови відносять:

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

1. Приклади вихідного тексту на OCaml

1.1. Запуск інтерпретатора OCaml

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

 $ Ocaml Objective Caml version 3.09.0  # 

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

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

1.2. Hello world

Наступна програма "hello.ml":

 print_endline  "Hello World!" 

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

 $ Ocamlc hello  .  ml  -  o hello 

або в оптимізований нативний код:

 $ Ocamlopt hello  .  ml  -  o hello 

і запущена:

 $.  /  hello Hello World  !  $ 

1.3. Обчислення суми елементів списку

Список є одним з основних типів даних в 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 

1.4. Швидке сортування

У наступному прикладі наведено алгоритм швидкого сортування, який сортує список в порядку зростання:

 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 

1.5. Послідовність Фібоначчі

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

Примітки