RosettaCodeData/Task/Y-combinator/Kitten/y-combinator.kitten

19 lines
401 B
Plaintext

define y<S..., T...> (S..., (S..., (S... -> T...) -> T...) -> T...):
-> f; { f y } f call
define fac (Int32, (Int32 -> Int32) -> Int32):
-> x, rec;
if (x <= 1) { 1 } else { (x - 1) rec call * x }
define fib (Int32, (Int32 -> Int32) -> Int32):
-> x, rec;
if (x <= 2):
1
else:
(x - 1) rec call -> a;
(x - 2) rec call -> b;
a + b
5 \fac y say // 120
10 \fib y say // 55