Sergey Lymar

Ноябрь 25, 2006

Функции как данные. Замыкание

Рубрика: Haskell, ФП — Sergey Lymar @ 12:21 дп

Было это в самом-самом начале моего изучения функциональных языков. Читая SICP (русский перевод) я понял что такое замыкание :) . Попробую это описать. Замыкание контекста - способность лямбда функции сохранять контекст, в котором она была определена. Это свойство лямбда функций можно использовать для хранения данных, т.е. некоторые данные можно хранить в виде функций. Извлекать эти данные можно с помощью других функций. Попробуем разобраться (на примере хранение пары):

pair a b = \fnc -> fnc a b
first p = p (\a b -> a)
second p = p (\a b -> b)

Итак, определяем пару как лямбда функцию от одного аргумента (этим аргументом впоследствии будет другая функция), этот аргумент применяется к членам пары. Функция получения первого члена пары будет функцией одного аргумента, которая будет применять этот аргумент к лямбда функции двух аргументов

\a b -> a

Функция получения второго члена пары определяется аналогично.

Теперь мы можем определить пару

some_pair = pair 1 2

И проверить как работают функции first и second

> first some_pair
1
> second some_pair
2

Итак, много-много малопонятного текста на русском, и всего три простые строчки на Haskell’е :)

Сайт работает на WordPress