Связанные и свободные переменные n λv.B n Переменная v называется связанной всюду в теле B функции λv.B, за исключением подвыражений B, где v переопределяется.

Презентация:



Advertisements
Похожие презентации
Сошников Дмитрий Валерьевич к.ф.-м.н., доцент Факультет инноваций и высоких технологий Московский физико-технический институт.
Advertisements

1 Кубенский А.А. Функциональное программирование. Глава 5. Системы исполнения функциональных программ. Глава 5. Системы исполнения функциональных программ.
ПЕРЕДАЧА ПАРАМЕТРОВ И ОБЛАСТЬ ИХ ДЕЙСТВИЯ Функциональное программирование Григорьева И.В.
1 Кубенский А.А. Функциональное программирование. Глава 4. Основы лямбда-исчисления. Будем задавать функции с помощью «лямбда-выражений», которые будем.
Функциональное программирование Язык программирования F#.NET.
Синонимы в сопоставлении с образцом n Ключевое слово as n match [1;2;3] with e1::( (e2::tail2) as tail1) -> … n Позволяет избежать лишнего сопоставления.
Часть 1: «Основы программирования». Содержание Основные понятия. Структура программы. Ввод-вывод Программирование циклов. Операторы цикла while, for и.
ОТОБРАЖАЮЩИЕ ФУНКЦИОНАЛЫ. Важный класс функционалов в практическом программировании на языке Лисп образуют отображающие функции или МАР-функции. МАР-функционалы.
ФУНКЦИИ БОЛЕЕ ВЫСОКОГО ПОРЯДКА Функциональное программирование Григорьева И.В.
Абстракция n Абстракция основана на u обобщении посредством введения имени вместо значения и u уточнении (конкретизации) посредством подстановки другого.
ИМЯ И ЗНАЧЕНИЕ СИМВОЛА Функциональное программирование Григорьева И.В.
ЦИКЛИЧЕСКИЙ АЛГОРИТМ Цели: -Познакомиться с понятием циклического алгоритма. -Освоить языковые средства для реализации циклических алгоритмов.
Определение функций Функциональное программирование Григорьева И.В.
АЛГОРИТМИЗАЦИЯ. Алгоритм Алгоритм – описание конечной последовательности действий, приводящей от исходных данных к нужному результату. Где встречаются.
Лекция 1 Классификация С++. Парадигмы программирования Императивная Функциональная Декларативная (логическая) Инструкция 1 Инструкция 2 Инструкция 3 Инструкция.
Функция вычисляет и возвращает результат в зависимости от исходных данных (аргументов).
Основные этапы решения задач на компьютере. Первый этап – постановка задачи. На этом этапе участвует человек, хорошо представляющий предметную область.
Алфавит языка TURBO PASCAL. Цель урока: Узнать: Алфавит языка программирования TURBO PASCAL. Этапы разработки программы Типы ошибок Разделы программы.
Функциональное программирование Лекция 11. Содержание Анализ искусственных и естественных языков Метапрограммирование: Quotations 2.
Алгоритмический язык и язык Бейсик Ученицы 11-А класса ОШ 15 Бондаренко Натальи.
Транксрипт:

Связанные и свободные переменные n λv.B n Переменная v называется связанной всюду в теле B функции λv.B, за исключением подвыражений B, где v переопределяется как связанная в другой (вложенной) лямбда-функции. n В противном случае переменная называется свободной. n Те же правила, что и для областей видимости переменных в языках программирования. n Пример: u (f λg.(g g) λf. λx.(f x)) n Первое вхождение – свободное, второе – связанное.

Альфа-преобразование (α- преобразование) n Согласованное переименование связанной переменной в заголовке и в теле лямбда-функции. n Новое имя для связанной переменной не должно было встречаться в теле функции как свободная переменная.

Эта-редукция (η-редукция) n λx.(E x) => E n Почему? n Будучи применной к любому аргументу y, λx.(E x) дает: u (λx.(E x) y) => (E y) n Это все равно, как если бы мы с самого начала писали (E y). n Хотя лямбда-функция может «существовать» и вне аппликации, ее основное предназначение – быть применяемой к аргументам. n Это «оправдывает» эта-редукцию.

САML: императивные конструкции n Мы хотим избежать употребления императивных конструкций в CAML n Немногие исключения: ввод-вывод, печать объектов, которые строят наши функции. n Рассмотрим «пустой» («единичный») объект и оператор последовательного выполнения действий.

Последовательное выполнение действий n выражение1; выражение2; … ; выражениеN u Каждое выражениеI вычисляет так же, как и прочие («чистые») функциональные выражения u Результатом последовательности (выражение1; выражение2; … ; выражениеN) является результат вычисления выраженияN. Результаты вычисления остальных выражений забываются.

«Пустой» («единичный») объект n Всего одно литеральное «значение» u () n Тип u unit n Используется для задания функций без аргументов или для выдачи результата там, где главный смысл выражения заключается в побочном эффекте, а результат не имеет значения. n let global_string = Некоторое сообщение программы;; n let print_global_string () = printf %s\n global string;; u unit -> unit

Ключевое слово 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)

Ключевое слово 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);

Функции как объекты 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);;

Функция eval n let rec eval = function | Val x -> x | Binop (func, e1, e2) -> (func (eval e1) (eval e2))