Update of SMART-cDNA Libraries for ZFISH

advertisement
Синтаксис языка OCAML


Числа

Целые

Вещественные
Целочисленные операции


Операции с вещественными числами


+-*/
+. -. *. /.
Автоматическое приведение целых чисел к
вещественным не производится
Вызов функции («аппликация»)

Все функции – каррированные

В матанализе:
f ( x, y )

В OCAML:
( f x y)


Библиотечные функции распределены по модулям

Printf.printf

List.rev
Ряд функций доступен в глобальном пространстве
имен:

float_of_int

int_of_string
Строки

В некоторых функц. языках строки реализованы как
списки символов (character); символ – один из
базовых типов.

В OCAML строка – базовый тип.

Над строками определены операции


Конкатенация

Вырезка

…
Для изображения строки-литерала используются
двойные кавычки

“This is some string”
Ключевое слово let

На верхнем уровне модуля:


let <имя> = <значение>;;
В теле функции:

let <имя> = <значение> in <выражение>
Списки

Список в литеральной форме:


Конструирование списка из головы и хвоста:


v1::v2
Пустой список


[v1; v2; … vn]
[]
Литеральная форма эквивалентна

v1::v2:: … ::vn::[]
Функции; рекурсивные функции

Функция – объект программы

Лямбда-выражение, лямбда-функция

function <имя> -> <тело>


Можно связать с переменной


fun имя1 имя2 … имяN -> тело
Специальная форма директивы let:


let f = function x -> x + 1
Сокращенная форма для каррированной лямбда-функции:


function x -> x + 1
let имя_функции имя1 имя2 … имяN = тело
Директива let для рекурсивных функций:

let rec имя_функции имя1 имя2 … имяN = тело
Сопоставление с образцом


match выражение with клоз1 | клоз2 | … | клозN

Можно ставить | и сразу после with (для красоты).

(Англ: pattern matching)
Клоз:



образец -> тело
Образец – структурное выражение, (обычно)
содержащее переменные
Сопоставление определяется индуктивно:



Простые объекты проверяются на совпадение
Переменная при первом вхождении связывается со
значением; при последующем проверяется на совпадение
Структура выражения должна совпадать.
Пример; Анонимная переменная




match 1::2::3::[] with
| [] -> “пусто!”
| v1::v2::v3::_ -> “список как минимум из 3x эл. “
| v1::v2 -> “непустой список!”
Анонимная переменная _ связывается со значением
как и обычная переменная.
Каждое вхождение _ в образец задает новую
анонимную переменную, отличную от остальных.
Сопоставление значений, присвоенных анонимным
переменным, никогда не производится.
Присвоенные значения «забываются».

| _::_::_::_ -> “список как минимум из 3x эл. “
Лямбда-функция и сопоставление с
образцом

Еще одна «избыточность» синтаксиса OCAML:


Можно записывать как


function x -> match x with список_клозов
function список_клозов
Пример:

function 1 -> “one” | 2 -> “two” | 3 -> “too much”
Программирование с использованием рекурсивных
функций
Прием: накапливающий аргумент


Функция sumlist реализована через вспомогательную
функцию suml2.
В suml2 использован накапливающий аргумент. В
нем хранится текущее значение суммы.
Download