【问题标题】: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 采用了以下内容:

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

【问题讨论】:

    标签: smlnj


    【解决方案1】:

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

    另外,你写的很有趣 ...foldl takes a function that compares two strings....

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

    【讨论】:

    • 这里的string 只是一个使用示例,但无论如何感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2010-09-15
    • 2014-10-05
    相关资源
    最近更新 更多