Haskell Rich Hickey';为什么不自动生成Clojure函数?

Haskell Rich Hickey';为什么不自动生成Clojure函数?,haskell,clojure,currying,Haskell,Clojure,Currying,哈斯克尔强调了它的功能。Clojure不允许使用部分和函数宏作为类似的方法 我记得我听到/读过希基做出决定的原因。有人记得那是什么原因吗?或者我在哪里能找到它 我希望从基本原理中学到一些东西。因为函数可以有多个算术,所以可以直接调用函数,而不是使用curry函数。接下来,若您只有一个arity,并且错过了一个参数,那个么不会检测到arity错误,而是生成一个currying函数。这是一种非常糟糕且难以调试的情况,尤其是当函数返回一个具有相同询问算术的函数时,或者如果函数作为参数传递给另一个函数时

哈斯克尔强调了它的功能。Clojure不允许使用
部分
和函数宏作为类似的方法

我记得我听到/读过希基做出决定的原因。有人记得那是什么原因吗?或者我在哪里能找到它


我希望从基本原理中学到一些东西。

因为函数可以有多个算术,所以可以直接调用函数,而不是使用curry函数。接下来,若您只有一个arity,并且错过了一个参数,那个么不会检测到arity错误,而是生成一个currying函数。这是一种非常糟糕且难以调试的情况,尤其是当函数返回一个具有相同询问算术的函数时,或者如果函数作为参数传递给另一个函数时


因此,专门创建一个currying函数似乎是合法的。

我认为至少部分原因是Clojure不是100%懒惰,应用程序不能延迟。您的第一句话不准确。无论提供了多少个参数,Haskell都会对所有函数进行咖喱化。实际上,所有Haskell函数都接受一个输入并返回一个输出。在Haskell中,uncurry函数实际上并不uncurry;相反,它将链中的前两个函数组合成一个函数,该函数以一对作为其单个输入。向Haskell Curry致敬。我很确定这是因为java函数可以是多变量的(具有可变参数数),所以clojure应该效仿。简言之,固定参数函数非常适合自动套用,而多元函数则不适合。因此,当你开发一个api时,如果你想要自动Curring,就要避免后者,而更喜欢前者。我正在编写一段Clojure风格的代码,试图使Curring函数和Variatic函数协同工作,我发现了与你提到的相同的问题。很高兴听到你这么说。为了给后代和那些不一定知道“算术”是什么的人一个具体的例子,你需要
(+12)
同时成为
3
和一个可组合的函数,因为你要求
(打印(+12))
3
放到控制台(正常评估),而
(+12)3
是一个产生
6
(currying)的表达式。我们知道这两种方法(例如“Church Numerics”)在表达式上都会失败,比如
(*12)3
也是
6
。而在haskell中,函数的算术是其类型的静态已知部分(例如
f::Int->(Int->(Int->Int))
),并且在部分应用程序的每个阶段,类型检查器都会跟踪其类型(例如
f4142::Int->Int