Beam wrote:
> P.S. Вообще-то я хотел поговорить именно о терминологии, т.е.получить/найти определения — лямбда, замыкание, карринг. Т.е. объяснение не на примерах, а именно определение терминов.

В таком случае проще прочесть в Википедии.

Из-за того, что в
лямбда-исчислении, функции прекрасно обходятся без имен, конструкции языков программирования, позволяющие в контексте выражения определить безымянную функцию/процедуру, часто называют лямбда-функциями, чаще всего неправомерно, просто по аналогии с Лиспом, в котором такая конструкция появилась впервые.

Карринг — простое преобразование, позволяющее свести все функции к функциям одного аргумента. Если язык программирования поддерживает функции высшего порядка, такое преобразование всегда можно выполнить вручную (Scheme):

(define foo_curried
    (lambda (x)
        (lambda (y)
            (foo x y)))))

Языки, о которых говорят, что они поддерживают карринг, это преобразование делают автоматически, т.е. (Ocaml)

let foo x y z = expr
(* эквивалентно *)
let foo =fun x -> fun y -> fun z -> expr


Closure

Это тело функции + окружение, в котором определены значения всех свободных переменных.
Posted via RSDN NNTP Server 2.0
Автор: Programmierer AG    Оценить