29 lines
657 B
Text
29 lines
657 B
Text
#import <Foundation/Foundation.h>
|
|
|
|
typedef int (^Func)(int)
|
|
typedef Func (^FuncFunc)(Func)
|
|
typedef Func (^RecursiveFunc)(id) // hide recursive typing behind dynamic typing
|
|
|
|
Func fix(FuncFunc f)
|
|
Func r(RecursiveFunc g)
|
|
int s(int x)
|
|
return g(g)(x)
|
|
return f(s)
|
|
return r(r)
|
|
|
|
int main(int argc, const char *argv[])
|
|
autoreleasepool
|
|
|
|
Func almost_fac(Func f)
|
|
return (int n | return n <= 1 ? 1 : n * f(n - 1))
|
|
|
|
Func almost_fib(Func f)
|
|
return (int n | return n <= 2 ? 1 : f(n - 1) + f(n - 2))
|
|
|
|
fib := fix(almost_fib)
|
|
fac := fix(almost_fac)
|
|
|
|
Log('fib(10) = %d', fib(10))
|
|
Log('fac(10) = %d', fac(10))
|
|
|
|
return 0
|