【发布时间】:2019-06-19 19:14:45
【问题描述】:
通常测试包含有关SML 的问题,有问题要求您查找函数的签名/类型。
例如 - 以下函数的类型是什么:
fun foo f g x y = f (f x (g x) y) y;
解决方案:
val foo = fn : ('a -> 'b -> 'b -> 'a) -> ('a -> 'b) -> 'a -> 'b -> 'b -> 'a
我想知道是否有一个好的算法可以用来解决这类问题。每次我尝试解决其中一个问题时,我都会感到困惑和失败。
【问题讨论】:
-
SML 使用Hindley-Milner Algorithm 进行类型推断,但不知何故,我不认为您要求的是实际算法,而是简单的启发式算法。如果是这样,那问题就太模糊了。
-
@SimonShine 我不认为这是重复的(尽管它们相似),因为另一个问题是针对一些特定示例的,而这个问题更多的是关于一般方法。这可能有点过于笼统,但由于 molbdnilo 给出了一个有用的答案,我想我会收回我的“过于广泛”的近距离投票。
-
我已经看过几次这个问题,是“我如何执行类型推断?”和“......给出这个实际的例子。”上次我回答 a question like this 时,我链接到了该问题的其他五个示例。因此,如果问题是一般性的,则需要回答,如果对具体示例有所帮助,则似乎通常不使用它们。也许,与其以“重复”投票结束,我应该简单地链接到现有问题,因为其他具体示例之一可能足够相似。
-
另外,我赞赏并赞成@molbdnilo 的回答。我一般不介意 SML 问题是家庭作业,因为这似乎是 SML 的命运。 :-)
标签: functional-programming sml