(fn '0 '(f) (lambda (x) x)) (fn '1 '(f) (lambda (x) (f x))) (fn '2 '(f) (lambda (x) (f (f x)))) (fn '++ '(n) (lambda (f) (lambda (x) (f ((n f) x))))) (def '3 (++ 2)) (def '4 (++ 3)) (def '5 (++ 4)) (fn 'tick '(s) '(implode (list 'I s))) (say (list '0==> ((0 tick) '.))) (say (list '1==> ((1 tick) '.))) (say (list '2==> ((2 tick) '.))) (say (list '3==> ((3 tick) '.))) (say (list '4==> ((4 tick) '.))) (say (list '5==> ((5 tick) '.))) ; composition is multiplication (fn 'compose/curry '(f) (lambda (g) (lambda (x) (f (g x))))) (fn 'times '(a b) '((compose/curry a) b)) (def '12 (times 3 4)) (say (list '12==> ((12 tick) '.))) ; try subtraction (fn '-- '(n) (lambda (f) (lambda (x) (let f2 (lambda (pair) (let a (car pair) b (cadr pair) (list 'T (if a (f b) b)))) ;_say_ (say (list 'x==> x)) tmp ((n f2) (list 'nil x)) ;_say_ (say (list 'tmp==> tmp)) (cadr tmp))))) (say (list '{--5}==> (((-- 5) tick) '.)))