Rich Hickey没有自动调整Clojure函数的原因?

Mar*_*rio 23 haskell clojure currying

Haskell讨论它的功能.尽管Clojure允许partial并使用宏作为执行相同操作的可比方法.

我以为我记得听到/读过希基的决定背后的原因.有人回忆起那个原因是什么,或者我在哪里可以找到它?

我希望从理论上学到一些东西.

Iva*_*rre 27

由于函数可以有多个arities,因此可以使用直接函数调用而不是currying函数.接下来,如果你只有一个arity,并且你错过了一个参数,则不会检测到arity错误,而是生成currying函数.一个非常糟糕和难以调试的情况,特别是如果函数返回具有相同问题arity的函数,或者函数作为参数传递给另一个函数.

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

  • 为后代和那些不一定知道"arities"的人提供一个具体的例子,你需要`(+ 1 2)`同时是'3`和一个可组合的函数,因为你要求两个`( print(+ 1 2))`将`3`放到控制台(正常评估),`((+ 1 2)3)`是一个产生'6`(currying)的表达式.我们知道这两种方式(例如"教会数字")往往会失败,例如`((*1 2)3)`也是'6`. (5认同)
  • 而在haskell中,函数的arity是其类型的静态已知部分(例如`f :: Int - >(Int - >(Int - > Int))`),并且在部分应用的每个阶段,类型检查器跟踪其类型(例如`f 41 42 :: Int - > Int`) (4认同)
  • 我正在研究一些Clojure启发的代码,并尝试使currying和可变参数函数协同工作,我发现了你提到的相同问题.重申要听取你的意见. (3认同)