【发布时间】:2017-04-02 22:35:14
【问题描述】:
我知道我可以像这样在 SML 中编写 y-combinator: 首先声明一个新的数据类型来绕过由于循环导致的类型不匹配。
datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
现在您可以轻松定义 y 组合器:
val Y = fn f => (fn x => fn a => f (unroll x x) a)
(Roll (fn x => fn a => f (unroll x x) a)))
那么你就完成了,你可以这样使用它:
val f = Y (fn f => fn n => if n = 0 then 1 else n * f (n-1))
我的问题是:还有其他方法可以在 SML 中实现 y 组合器吗?
【问题讨论】:
标签: functional-programming sml y-combinator