~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 3ECD6AD1DD29FA51FE71BEF9E5BDB4A7__1715929380 ✰
Заголовок документа оригинал.:
✰ Caml - Wikipedia ✰
Заголовок документа перевод.:
✰ Камл — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Caml ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/3e/a7/3ecd6ad1dd29fa51fe71bef9e5bdb4a7.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/3e/a7/3ecd6ad1dd29fa51fe71bef9e5bdb4a7__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:00:31 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 17 May 2024, at 10:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Камл — Википедия Jump to content

Камл

Из Википедии, бесплатной энциклопедии

Камл
Парадигма Мультипарадигмальность : функциональная , императивная.
Семья МЛ
Разработано Жерар Юэ , Ги Кузино, Аскандер Суарес, Пьер Вайс, Мишель Мони (Heavy Caml), Ксавье Лерой (Caml Light)
Разработчик ИНРИА , ЭНС
Впервые появился 1985 год ; 39 лет назад ( 1985 )
Стабильная версия
0.75 [1] / 26 января 2002 г .; 22 года назад ( 26 января 2002 г. )
Дисциплина набора текста предполагаемый , статичный , сильный
Управление памятью автоматический
ТЫ Кроссплатформенность : Unix , Linux , macOS ; Окна
Лицензия QPL 1, LGPL 2 (Caml Light)
Веб-сайт камл .инрия .fr
Под влиянием
МЛ
Под влиянием
OCaml

Caml (первоначально аббревиатура от Categorical Abstract Machine Language ) — это многопарадигмальный , общего назначения , высокоуровневый , функциональный язык программирования который является диалектом ML семейства языков программирования . Caml был разработан во Франции во Французском институте исследований в области компьютерных наук и автоматизации (INRIA) и Высшей нормальной школе (Париж) (ENS).

Caml статически типизирован , строго оценивается и использует автоматическое управление памятью . OCaml , основной потомок Caml, добавляет в язык множество функций, включая уровень объектно-ориентированного программирования (объектный).

Примеры [ править ]

В следующих, # представляет приглашение Caml.

Привет, мир [ править ]

« Привет, мир!» программа это:

print_endline   "Привет, мир!"   ;; 

Функция факториала (рекурсия и чисто функциональное программирование) [ править ]

Многие математические функции, например факториал, наиболее естественно представить в чисто функциональной форме. Следующая рекурсивная чисто функциональная функция Caml реализует факториал:

let   Rec   fact   n   =   если   n  =  0,   то   1   else   n   *   fact  (  n   -   1  );; 

Функцию можно записать эквивалентно, используя сопоставление с образцом :

пусть   запись   факта   =   функция 
   |    0   ->   1 
   |    n   ->   n   *   факт  (  n   -   1  );; 

Эта последняя форма представляет собой математическое определение факториала как рекуррентного отношения.

Обратите внимание, что компилятор определил тип этой функции как int -> int, что означает, что эта функция отображает целые числа на целые. Например, 12! является:

 #   факт   12  ;; 
   -   :   интервал   =   479001600 

Числовая производная (функции высшего порядка) [ править ]

Поскольку Caml является функциональным языком программирования , в программах Caml легко создавать и передавать функции. Эта способность имеет очень много применений. Одним из примеров является вычисление числовой производной функции. Следующая функция Caml d вычисляет числовую производную заданной функции f в данный момент x:

пусть   d   дельта   f   x   = 
   (  f   (  x   +   дельта  )   - е   -   дельта  ( x   )   )  /   .    (  2  .   *.   дельта  );; 

Эта функция требует небольшого значения delta. Хорошим выбором для дельты является кубический корень из машинного эпсилона . [ нужна цитата ] .

Тип функции d указывает на то, что он отображает float на другую функцию типа (float -> float) -> float -> float. Это позволяет нам частично применять аргументы. Этот функциональный стиль известен как каррирование . В этом случае полезно частично применить первый аргумент delta к d, чтобы получить более специализированную функцию:

#   let   d   =   d   (  sqrt   epsilon_float  );; 
  val   d   :   (  float   ->   )  -   >   float   -   float   =   <fun>  >  float 

Обратите внимание, что выведенный тип указывает, что замена d ожидает функцию типа float -> floatв качестве первого аргумента. Мы можем вычислить численное приближение к производной в с:

#   d   (  fun   x   ->   x   *.   x   *.   x   -.   x   -.   1  .)   3  .;; 
  -   :   плавающее   =   26  . 

Правильный ответ .

Функция d называется « функцией высшего порядка », поскольку она принимает другую функцию ( f) в качестве аргумента. Двигаясь дальше, можно создать (приблизительную) производную от f, применив d опуская при этом x аргумент:

#   let   f'   =   d   (  fun   x   ->   x   *.   x   *.   x   -.   x   -.   1  .)   ;; 
  val   '   :   float   -   float   =   <fun>  f  > 

Понятия каррирования и функций высшего порядка явно полезны в математических программах. Эти концепции в равной степени применимы к большинству других форм программирования и могут использоваться для более агрессивной факторизации кода, что приводит к сокращению программ и меньшему количеству ошибок.

Дискретное вейвлет-преобразование (сопоставление с образцом) [ править ]

Одномерное вейвлет- преобразование Хаара для целочисленного списка чисел длиной в степени двойки может быть очень лаконично реализовано в Caml и является отличным примером использования сопоставления с образцом в списках, берущих пары элементов ( h1 и h2) с фронта и сохранение их сумм и разностей в списках s и d, соответственно:

#   let   haar   l   = 
    let   Rec   aux   l   s   d   =  
      сопоставить   l  ,   s  ,   d   с 
        [  s  ],   []  ,   d   ->   s   ::   d 
      |    []  ,   s  ,   d   ->   aux   s   []   d 
      |    h1   ::   h2   ::   t  ,   s  ,   d   ->   aux   t   (  h1   +   h2   ::   s  )   (  h1   -   h2   ::   d  ) 
      |    _   ->   инвалид_арг   "хаар"  
      в   aux   l   []   []  ;; 
  val   haar   :   int   list   >   int   list   =   <fun>  - 

Например:

  #   волосы   [  1  ;    2  ;    3  ;    4  ;    -4   ;    -  3  ;    -2   ;    -  1  ];; 
     -   :   int   список   =   [  0  ;    20  ;    4  ;    4  ;    -  1  ;    -  1  ;    -  1  ;    -  1  ] 

Сопоставление с образцом позволяет четко и кратко представить сложные преобразования. Более того, компилятор Caml превращает совпадения с шаблонами в очень эффективный код, что иногда приводит к тому, что программы оказываются короче и быстрее, чем эквивалентный код, написанный с использованием оператора case (Cardelli 1984, стр. 210).

История [ править ]

Первая реализация Caml была написана на Лиспе Аскандером Суаресом в 1987 году во Французском институте исследований в области компьютерных наук и автоматизации (INRIA). [2]

Его преемник, Caml Light , был реализован на C Ксавье Леруа и Дэмиеном Долигезом , [2] а оригинал получил прозвище «Heavy Caml» из-за более высоких требований к памяти и процессору. [2]

Caml Special Light представлял собой еще одну полную переработку, в результате которой к основному языку добавилась мощная система модулей. Он был дополнен слоем объектно-ориентированного программирования (объектного) и стал Objective Caml , в конечном итоге переименованным в OCaml .

См. также [ править ]

Ссылки [ править ]

  1. ^ «Последний выпуск Caml Light» . Проверено 22 февраля 2020 г. .
  2. ^ Перейти обратно: а б с «История Caml» , inria.fr

Библиография [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 3ECD6AD1DD29FA51FE71BEF9E5BDB4A7__1715929380
URL1:https://en.wikipedia.org/wiki/Caml
Заголовок, (Title) документа по адресу, URL1:
Caml - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)