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

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

+4

Карри - фамилия логика Хаскелла Карри. – dfeuer

+1

Складывание иногда называют сокращением. Функции, которые складываются, иногда называют катаморфизмами. Я не знаю, что это лучше. – dfeuer

+1

Вы можете найти ссылки на историю * идеи * складывания в классике Грэма Хаттона [Учебник по универсальности и выразительности складок] (http://www.cs.nott.ac.uk/~pszgmh/fold. pdf), в котором прослеживается его теория рекурсии Клейна, оператор сокращения APL и оператор вставки FP, но они, похоже, не попадают в этимологию. – dfeuer

ответ

3

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

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

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

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

+2

Я также родился в 1985 году, но мне всего 30 ... –

+1

Математика трудна .. извините. – user2407038

+0

ваше редактирование только что убило мою шутку! –

8

Карри фамилия Haskell Curry, известный логик after whom Haskell got its name 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» в моем голодном мнении. Но мистер Карри все еще может быть запуган.

Складывание может быть переименовано в блеф, если вы не выполнили the multitude of presently available names for it - благодаря som-snytt для конструктивной идеи.

+2

Вы складываетесь в покере, когда у вас слабая рука, а блеф не вариант. Вы используете fold, когда у вас нет более мощного оператора, и вы держите пари, что никто не назовет ваш блеф и не спросит, как ваши вычисления дают результат, который он делает. –

+2

Является ли это основой для будущего языка программирования в парадигме вероятностного и психологического программирования, @ som-snytt –

+0

@ Эрик Алик, более слабая версия рекурсии? – rapt

Смежные вопросы