相关疑难解决方法(0)

如何在没有"let rec"的情况下定义y-combinator?

在几乎所有的例子中,ML类型语言中的y-combinator都是这样编写的:

let rec y f x = f (y f) x
let factorial = y (fun f -> function 0 -> 1 | n -> n * f(n - 1))
Run Code Online (Sandbox Code Playgroud)

这可以按预期工作,但使用时定义y组合器感觉就像是作弊let rec ....

我想使用标准定义在不使用递归的情况下定义此组合器:

Y = ?f·(?x·f (x x)) (?x·f (x x))
Run Code Online (Sandbox Code Playgroud)

直接翻译如下:

let y = fun f -> (fun x -> f (x x)) (fun x -> f (x x));;
Run Code Online (Sandbox Code Playgroud)

然而,F#抱怨它无法弄清楚类型:

  let y = fun f -> (fun x -> f (x x)) (fun x -> f …
Run Code Online (Sandbox Code Playgroud)

f# y-combinator

47
推荐指数
2
解决办法
3890
查看次数

标签 统计

f# ×1

y-combinator ×1