Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замыкания и currying ... 
V
    Опции темы
regis
Дата 4.6.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



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


--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
cherep
Дата 10.6.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 11.1.2006
Где: Москва

Репутация: нет
Всего: 4



По моему скромному, но аффторитетному  smile   мнению Currying и Closures это все же разные вещи.

Curring это когда ты в функции с n параметрами фиксируешь k из них, получаешь функцию от (n-k) параметров.
А closure - это когда функция "захватывает" свой локальный контекст, т.е. тот, в котором она определена.
PM MAIL WWW ICQ   Вверх
regis
Дата 13.6.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 12.12.2005
Где: Москва, Россия

Репутация: нет
Всего: 7



Цитата(cherep @ 10.6.2007,  18:29)
По моему скромному, но аффторитетному  smile   мнению Currying и Closures это все же разные вещи.

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: один параметр бинарной операции "замораживается", второй остается свободным.

--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.