Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Философия программирования > Замыкания и currying ...


Автор: regis 4.6.2007, 14:17
Хотелось бы услышать комментарии людей, хорошо разбирающихся в функциональном программировании. Насколько тесно связаны эти концепции? Например, можео ли сказать, что closure -- это всегда некая curried функция (или несколько), или это будет некорректно?


Автор: cherep 10.6.2007, 18:29
По моему скромному, но аффторитетному  smile   мнению http://en.wikipedia.org/wiki/Curryingи http://en.wikipedia.org/wiki/Closure_%28computer_science%29это все же разные вещи.

Curring это когда ты в функции с n параметрами фиксируешь k из них, получаешь функцию от (n-k) параметров.
А closure - это когда функция "захватывает" свой локальный контекст, т.е. тот, в котором она определена.

Автор: regis 13.6.2007, 12:07
Цитата(cherep @ 10.6.2007,  18:29)
По моему скромному, но аффторитетному  smile   мнению http://en.wikipedia.org/wiki/Curryingи http://en.wikipedia.org/wiki/Closure_%28computer_science%29это все же разные вещи.

Curring это когда ты в функции с n параметрами фиксируешь k из них, получаешь функцию от (n-k) параметров.
А closure - это когда функция "захватывает" свой локальный контекст, т.е. тот, в котором она определена.

Естественно, это разные концепции -- но я говорю о том, что некоторое родство безусловно есть.
Вот классический пример closure из Python-мануала:

Код

    >>> def make_incrementor(n):
    ...     return lambda x: x + n
    ...
    >>> f = make_incrementor(42)
    >>> f(0)
    42
    >>> f(1)
    43


Здесь make_incrementor возвращает замыкание. Вместе с тем, результат очень похож на currying: один параметр бинарной операции "замораживается", второй остается свободным.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)