为什么 foldl 签名是管道而不是 SML 中的元组类型?

Why is foldl signature is a pipeline instead of a tuple like type in SML?

不明白为什么foldl的签名是这样的

Standard ML of New Jersey v110.79 [built: Tue Aug  8 23:21:20 2017]
- foldl;
val it = fn : ('a * 'b -> 'b) -> 'b -> 'a list -> 'b

特别是,箭头 -> 应该是星号 *,如下所示:

val it = fn : ('a * 'b -> 'b) * 'b * 'a list -> 'b

而原因是因为 foldl 采用以下内容:

  1. 函数 ('a * 'b -> 'b) 比较 & returns 两个字符串之一;假设 acc 是 'b,因此,返回 acc
  2. acc & 'a list 进行比较。
  3. 最后,返回基数 'b,即 acc

* 需要它是一个元组,这就需要提供元组的所有组件...... -> 需要 currying,这允许 partial application。两者都是两种不同的语义。

还有,你写的很有意思 ...foldl takes a function that compares two strings....

foldl 是通用的并且非常多态,那么为什么它只适用于 string。特定的 function application 可以处理 string 数据,但不能处理 function definition 本身。