节是柯里化的结果吗?

Tim*_*Tim 0 haskell operators currying partial-application operator-sections

Hutton 的 Haskell 编程

一般来说,if 是一个运算符,则参数 和 的 #形式的表达式 称为节,其作为函数的含义可以使用 lambda 表达式形式化,如下所示:(#)(x #)(# y)xy

(#)   =   \x  ->  (\y ->  x   #   y)
(x    #)  =   \y  ->  x   #   y
(#    y)  =   \x  ->  x   #   y
Run Code Online (Sandbox Code Playgroud)

“部分”和“柯里化”有什么区别和关系?

一个部分是将柯里化操作应用于多参数函数的结果吗?

谢谢。

che*_*ner 6

节只是将中缀运算符应用于单个参数的特殊语法。(# y)是两者中更有用的一个,因为(x #)相当于(#) x(它只是以通常的方式将中缀运算符作为函数应用于单个参数)。

  • @melpomene 严格来说,我不认为是这样。[报告第3.5节](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-300003.5)仅讨论左部分和右部分;`(#)` 语法在[第 3.2 节](https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-240003.2) 中单独提到。 (3认同)
  • 我曾经问过[“节”一词从何而来](/sf/ask/2837559861/),似乎没有明确的来源。如果没有严格的定义,我不会感到惊讶;直观上,我认为它是中缀运算符的部分应用,其中“(#)”看起来像部分,但不一定与部分相关。有人可能会争辩说,“应用于”零参数的运算符的计算结果为“基础”函数。 (2认同)