为啥 foldl 签名是管道而不是 SML 中的元组类型?
Posted
技术标签:
【中文标题】为啥 foldl 签名是管道而不是 SML 中的元组类型?【英文标题】:Why is foldl signature is a pipeline instead of a tuple like type in SML?为什么 foldl 签名是管道而不是 SML 中的元组类型? 【发布时间】:2022-01-08 08:07:42 【问题描述】:我不明白为什么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)
比较&返回两个字符串之一;假设acc
是'b,因此,返回acc
acc
& 'a list
进行比较。
最后,返回基数'b,即acc
。
【问题讨论】:
【参考方案1】:*
需要它是一个元组,这需要提供元组的所有组件...->
需要currying
,它允许partial application
。两者都是 2 种不同的语义。
另外,你写的很有趣
...foldl takes a function that compares two strings...
.
foldl
是通用的并且非常多态,那么为什么它只适用于string
。一个特定的function application
可以处理string
数据,但不能处理function definition
本身。
【讨论】:
这里的string
只是一个使用示例,但无论如何感谢您的回答。以上是关于为啥 foldl 签名是管道而不是 SML 中的元组类型?的主要内容,如果未能解决你的问题,请参考以下文章