功能编程:Curry&折叠 - 什么是词源?

时间:2015-12-17 00:24:29

标签: scala haskell functional-programming history

  1. Curry& Fold - 程序意义上的词源是什么? 我看不出这些homonyms的任何英文含义与这些术语的功能有何关联。

  2. 如果你不得不将它们重命名为更明显的东西 - 你会怎么做?

2 个答案:

答案 0 :(得分:8)

Curry是Haskell Curry的姓,是20世纪着名的逻辑学家after whom Haskell got its name

并且“折叠”仅仅因为折叠操作符比喻地表示折叠,就像一手牌可以折叠成看起来像一张卡片。将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等,所以不要过于沉迷于扑克比较和词源。

至于如何命名他们:重命名一个死人可能不是最合乎道德的事情。这个可怜的家伙是如此成功,他的名字被用于大事,然后你想剥夺他追求他的喜悦并将他改名为别的东西?除非Newton Watt Scoville或KelvinCelsiusÂngström还有别的东西,否则我真的不会尝试重命名。

但是,如果你的意思是重命名编程概念:在饥饿的意见中可以用名称“ricing”来引用它。但库里先生可能仍然感到害怕。

如果你没有被the multitude of presently available names for it完成,折叠实际上可以被重命名为虚张声势 - 感谢som-snytt的建设性想法。

答案 1 :(得分:3)

我相信"折叠"术语主要来自于使用" fold"像"to fold into..."这样的短语是厨师最常用的词,我相信(我看了很多烹饪节目......)。我们在函数式编程的上下文中使用它,因为我们说,例如,对于列表,列表的头部是"折叠到"折叠尾巴的结果。例如,函数foldr是一个"配方"如何烹饪"一个清单,如果你愿意的话,那个食谱的一部分是#34;将它折叠成#34;

最早提及"折叠"我可以在1985年由剑桥大学出版的this报告中的函数式编程中找到我在互联网上找到的内容,其中有这样的说法:

  

函数 gather 应用列表的每个元素和终端值之间“两个”参数的函数。 [...]此功能在其他语言中也称为 reduce fold

很明显,术语"折叠"甚至在30年前至少有点普遍!