答案 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年前至少有点普遍!