Функциональное программирование: Curry & Fold - каковы этимологии?

  1. Curry & Fold - каковы этимологии в программном смысле? Я не вижу, как какое-либо из английских значений этих омонимов связано с функциональностью этих терминов.

  2. Если бы вам пришлось переименовать их в нечто более очевидное - как бы вы это сделали?

2 ответа

Решение

Я полагаю, что термин "сложить" происходит в основном от использования слова "сложить" в таких словах, как "сложить в...", который, как я полагаю, чаще всего используется поварами (я смотрю множество кулинарных шоу...). Мы используем его в контексте функционального программирования, потому что мы говорим, что, например, для списков, заголовок списка "складывается" в результат складывания хвоста. Например, функция foldr это "рецепт" для того, как "приготовить" список, и часть этого рецепта "сложить в это", если хотите.

Самая старая ссылка на "сворачивание", которую я смог найти в Интернете в контексте функционального программирования в этом отчете, опубликованном в 1985 году Кембриджским университетом, в котором говорится следующее:

Функция collect применяет функцию двух аргументов "между" каждым элементом списка и значением терминала. [...] Эта функция также известна как уменьшение или сворачивание в других языках.

Очевидно, что термин "сгиб" был хотя бы несколько распространен даже 30 лет назад!

Карри - фамилия Хаскелла Карри, известного логика 20-го века, в честь которого Хаскелл получил свое имя.

И "сворачивание" просто потому, что оператор сгиба образно представляет собой фолд, как карточная рука может быть сложена, чтобы выглядеть как одна карта. Думать о foldr (+) 0 [1,2,3] == 6 как рука карт 1, 2 и 3, сложенная в одну карту 6.

Слово "сокращение", которое также означает сворачивание, может быть проиллюстрировано с использованием аналогичной аналогии.

Конечно, Haskell более волшебен, чем даже самая блефующая и удачливая игра в покер, поэтому сгибы в функциональном программировании могут фактически создать колоду карт, которая содержит больше карт, чем рука, из которой она была сложена, или карты могут быть сложены в кошек и т. Д.: foldr (\i, acc -> [show i,show i,show i] ++ acc) [] [1,2,3] == ["1","1","1","2","2","2","3","3","3"], Поэтому то, что начиналось как складывание, в конечном итоге превратилось в чрезвычайно универсального оператора, который может производить map так же как filter и т.д., так что не увлекайтесь сравнением покера и этимологией.


Что касается того, как назвать их: переименование мертвого человека может быть не самым этичным, что нужно сделать. Бедняга настолько успешен, КАК его имена используются для больших вещей, а потом вы хотите посмертно лишить его его радости и переименовать в другое? Если, возможно, что-то еще - это Ньютон Уотт Сковилл или Кельвин Цельсий Ангстрем, я бы не стал серьезно пытаться переименовать.

Однако, если вы имели в виду переименование концепции программирования: вместо этого на мой взгляд, ее можно назвать именем "ricing". Но мистер Карри все еще может чувствовать страх.

На самом деле сворачивание может быть переименовано в блеф, если вы не удовлетворены множеством доступных для него имен - спасибо som-snytt за конструктивную идею.

Другие вопросы по тегам