来个例子:
c#:
Func<Func<Func<int, int>, Func<int, int>>, Func<int, int>> Y = f => ((Recursive)(g => (f(x => g(g)(x)))))((Recursive)(g => f(x => g(g)(x))));
var fac = Y(f => x => x < 2 ? 1 : x * f(x - 1));
var fib = Y(f => x => x < 2 ? x : f(x - 1) + f(x - 2));
coffeescript:
Y = (f) -> g = f( (t…) -> g(t…) )
fac = Y( (f) -> (n) -> if n > 1 then n * f(n-1) else 1 )
fib = Y( (f) -> (n) -> if n > 1 then f(n-1) + f(n-2) else n )
规则大概有:
- 不可引用第三方库,只能使用各个语言的标准库
- 不能恶意压缩代码
- 函数声明语句(如 def func():)不算在 3 行之内