def fac (f) function (n) if (equal? n 0) 1 * n (f (- n 1)) def fib (f) function (n) cond (equal? n 0) 0 (equal? n 1) 1 else (+ (f (- n 1)) (f (- n 2))) def Y (f) (function (x) (x x)) function (y) f function (&rest args) (apply (y y) args) assertEqual ((Y fac) 5) 120 assertEqual ((Y fib) 8) 21