23 lines
601 B
C#
23 lines
601 B
C#
using System;
|
|
|
|
delegate int Func(int i);
|
|
delegate Func FuncFunc(Func f);
|
|
delegate Func RecursiveFunc(RecursiveFunc f);
|
|
|
|
static class Program {
|
|
static void Main() {
|
|
var fac = Y(almost_fac);
|
|
var fib = Y(almost_fib);
|
|
Console.WriteLine("fac(10) = " + fac(10));
|
|
Console.WriteLine("fib(10) = " + fib(10));
|
|
}
|
|
|
|
static Func Y(FuncFunc f) {
|
|
RecursiveFunc g = r => f(x => r(r)(x));
|
|
return g(g);
|
|
}
|
|
|
|
static Func almost_fac(Func f) => x => x <= 1 ? 1 : x * f(x - 1);
|
|
|
|
static Func almost_fib(Func f) => x => x <= 2 ? 1 : f(x - 1) + f(x - 2);
|
|
}
|