ML族语言具有自动压缩功能 - 其中带有两个参数的函数调用被认为一次应用一个参数,f x y
= (f x) y
- 而其他语言族没有。为什么自动在ML家族语言中进行压缩
这仅仅是一次历史性的事故,还是有技术上的原因呢?
请注意,我是而不是问自动卷曲是净是好还是坏(这是一种主观判断)。我在问,它是否与ML家族语言的其他功能产生协同作用,从而使其更加自然地包含在这些语言中,如果是这样,这些功能是什么以及协同的性质是什么?或者相反,其他语言家族的特征是否会与任何提供自动卷曲的尝试冲突?
编辑:除了给出的答案之外,我觉得还有另外一个因素:如果编写的编译器是一种模式匹配的语言,AST可以更复杂,意味着传统的“使用元组调用”构造是一个复合词是没问题的。所以考虑到编译器通常是用自己的语言编写的,自动的卷曲和模式匹配很好地结合在一起。
“其一,它简化了语言:无需引入带有多个参数的函数作为一个单独的概念“ 当然,但是元组或currying都可以实现这一点。为什么都有?为什么不只是元组,因为你也希望那些用于数据结构? – munificent
@功能性语言中的功能是一流的,所以其基础上的表现力已经存在。这个问题归结为是否提供一点点语法糖来方便*用curried风格编写函数定义。答案是,为什么不呢,因为支持和微不足道是很有用的(见第二点),而且更简洁一些。 –
当然,我并没有声称添加糖是不值得的,但你之前的说法是,咖喱简化了语言,我认为这不是这种情况。一旦你有元组,你就不再需要currying来避免multi-arg fns的复杂性。柯里里只是一个很好的奖金。 – munificent