Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемПолина Чернакова
1 Связанные и свободные переменные n λv.B n Переменная v называется связанной всюду в теле B функции λv.B, за исключением подвыражений B, где v переопределяется как связанная в другой (вложенной) лямбда-функции. n В противном случае переменная называется свободной. n Те же правила, что и для областей видимости переменных в языках программирования. n Пример: u (f λg.(g g) λf. λx.(f x)) n Первое вхождение – свободное, второе – связанное.
2 Альфа-преобразование (α- преобразование) n Согласованное переименование связанной переменной в заголовке и в теле лямбда-функции. n Новое имя для связанной переменной не должно было встречаться в теле функции как свободная переменная.
3 Эта-редукция (η-редукция) n λx.(E x) => E n Почему? n Будучи применной к любому аргументу y, λx.(E x) дает: u (λx.(E x) y) => (E y) n Это все равно, как если бы мы с самого начала писали (E y). n Хотя лямбда-функция может «существовать» и вне аппликации, ее основное предназначение – быть применяемой к аргументам. n Это «оправдывает» эта-редукцию.
4 САML: императивные конструкции n Мы хотим избежать употребления императивных конструкций в CAML n Немногие исключения: ввод-вывод, печать объектов, которые строят наши функции. n Рассмотрим «пустой» («единичный») объект и оператор последовательного выполнения действий.
5 Последовательное выполнение действий n выражение1; выражение2; … ; выражениеN u Каждое выражениеI вычисляет так же, как и прочие («чистые») функциональные выражения u Результатом последовательности (выражение1; выражение2; … ; выражениеN) является результат вычисления выраженияN. Результаты вычисления остальных выражений забываются.
6 «Пустой» («единичный») объект n Всего одно литеральное «значение» u () n Тип u unit n Используется для задания функций без аргументов или для выдачи результата там, где главный смысл выражения заключается в побочном эффекте, а результат не имеет значения. n let global_string = Некоторое сообщение программы;; n let print_global_string () = printf %s\n global string;; u unit -> unit
7 Ключевое слово failwith n Полезно при обработке данных из внешних источников (файлов, БД) n Позволяет инициировать исключительную ситуацию с сообщением об ошибке n Пример: u let rec take_logs = function | [] -> [] | x::_ when x failwith need a positive value | x::xs -> (log x)::(take_logs xs)
8 Ключевое слово assert n Полезно при отладке n Позволяет задать условие, играющее роль «инварианта» в данном месте программы n Пример: u let test_rem_dup () = let test_list = [1; 2; 2; 3; 4; 4; 4; 5] in let resulting_list = remove_duplucates test_list in assert ((compare_lists resulting_list [1; 2; 3; 4; 5]) == 0);
9 Функции как объекты n Пример: «калькулятор» n От синтаксического анализа пока абстрагируемся n Рассматриваем выражения, представленные в виде древовидных структур n type expr = Val of float | Binop of (float -> float -> float * expr * expr) n let myexpr = Binop ((+.), Val 7.0, Val 8.0);;
10 Функция eval n let rec eval = function | Val x -> x | Binop (func, e1, e2) -> (func (eval e1) (eval e2))
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.