为什么 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
采用以下内容:
- 函数
('a * 'b -> 'b)
比较 & returns 两个字符串之一;假设 acc
是 'b,因此,返回 acc
acc
& 'a list
进行比较。
- 最后,返回基数 'b,即
acc
。
*
需要它是一个元组,这就需要提供元组的所有组件...... ->
需要 currying
,这允许 partial application
。两者都是两种不同的语义。
还有,你写的很有意思
...foldl takes a function that compares two strings...
.
foldl
是通用的并且非常多态,那么为什么它只适用于 string
。特定的 function application
可以处理 string
数据,但不能处理 function definition
本身。
不明白为什么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
采用以下内容:
- 函数
('a * 'b -> 'b)
比较 & returns 两个字符串之一;假设acc
是 'b,因此,返回acc
acc
&'a list
进行比较。- 最后,返回基数 'b,即
acc
。
*
需要它是一个元组,这就需要提供元组的所有组件...... ->
需要 currying
,这允许 partial application
。两者都是两种不同的语义。
还有,你写的很有意思
...foldl takes a function that compares two strings...
.
foldl
是通用的并且非常多态,那么为什么它只适用于 string
。特定的 function application
可以处理 string
数据,但不能处理 function definition
本身。