【问题标题】:ml type analysis of the fold function折叠函数的ml类型分析
【发布时间】:2012-11-06 21:35:01
【问题描述】:

谁能向我解释一下如何找出下面定义的函数 fold 的类型?

fun fold func [] base = base
|   fold func (x::xs) base = fold func xs (func x base);

我的答案是'c->'a list->'b->'b,但我发现在将代码插入我的SML程序后,类型实际上应该是('a->'b-> 'b)->'a 列表->'b->'b.

我知道 'a list->'b->'b 来自哪里,但第一部分让我感到困惑。是不是因为 func 接受两个参数,一个 'a 和一个 'b,并返回 base 的类型,即 'b?

任何帮助将不胜感激。

【问题讨论】:

    标签: types ml


    【解决方案1】:

    是不是因为 func 有两个参数,一个 'a 和一个 'b,并返回 base 的类型,即 'b?

    是的,没错。

    如果第一部分只是您最初假设的'c,那意味着fold 的第一个参数可以是任何值——例如int。显然,将int(或任何其他非函数)作为func 的第一个参数传递是不合法的,因此第一个参数需要有一个类型,告诉类型系统只允许此参数的函数。

    事实上,它不应该只允许任何函数,而应该只允许适当类型的函数。 func 的适当类型是 'a -> 'b -> 'b,原因您在上面所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      相关资源
      最近更新 更多