【发布时间】:2014-09-17 13:12:06
【问题描述】:
到目前为止,我一直认为 SML 是简单类型 lambda 演算的便捷实现。学习什么是简单类型的 lambda 演算,我了解到它不能对递归函数进行类型检查。
我了解到存在简单类型的 lambda 演算的泛化,命名为 SystemF。SystemF 是多态的,具有函数返回类型,这可能会以某种方式考虑 SML 的函子,但是 SystemF(根据我已阅读),无法对无限递归进行类型检查,而这可以通过 SML 轻松实现:
fun r x: int = (r x): int (* Type‑checks *)
val y = r 0 (* Infinite loop *)
如果 SML 的类型系统既不是简单类型也不是 SystemF,那么它是什么(正式)?还是我错了,两者兼而有之?
【问题讨论】:
-
另请参阅stackoverflow.com/questions/12717690,这可能是您遇到的下一个问题。对于 OCaml 没关系;答案是一样的。
标签: types computer-science sml