; Fix! http://cap-lore.com/Languages/lambda/Combinators.html ; The function ass below removes parentheses if associative rule implies them. (define (ass x) (if (pair? x) (if (pair? (car x)) (append (ass (car x)) (map ass (cdr x))) (cons (car x) (map ass (cdr x)))) x)) Test cases: (ass '(a (w e) r)) => (a (w e) r) (ass '(s ((t b) v) e)) => (s (t b v) e) (ass '((a v) t)) => (a v t) (ass '((a b) (c d))) => (a b (c d)) ---------- ((λSKI. (S (S (S (K S) S (K K) I) S (S (K S) S (S (K S) S (K K) K S) S (S (K S) S (S (K S) S (K K) K S) S (S (K S) S (K K) K K) K I) S (S (K S) S (K K) K K) K I) S (K K) K I) S (S (K S) S (K K) I) S (S (K S) S (S (K S) S (K K) K S) S (S (K S) S (S (K S) S (K K) K S) S (S (K S) S (K K) K K) K I) S (S (K S) S (K K) K K) K I) S (K K) K I) ; App goes here. ) (λfgx.fx(gx)) ; S (λxy.x) ; K (λx.x) ; I ) (pr ((Y rd) 7)) rd = (λrn.(zn(λd.H)(λD.(S(r(dn))))i)) pr = (λn.ni0) ((λn.ni0) ((((λSKI. (S (S (S (K S) (S (K K) I)) (S (S (K S) (S (S (K S) (S (K K) (K S))) (S (S (K S) (S (S (K S) (S (K K) (K S))) (S (S (K S) (S (K K) (K K))) (K I)))) (S (S (K S) (S (K K) (K K))) (K I))))) (S (K K) (K I)))) (S (S (K S) (S (K K) I)) (S (S (K S) (S (S (K S) (S (K K) (K S))) (S (S (K S) (S (S (K S) (S (K K) (K S))) (S (S (K S) (S (K K) (K K))) (K I)))) (S (S (K S) (S (K K) (K K))) (K I))))) (S (K K) (K I))))) ; App goes here. ) (λfgx.fx(gx)) ; S (λxy.x) ; K (λx.x) ; I ) (λrn.(zn(λd.H)(λD.((λnfx.f(nfx))(r(dn))))i))) 7)) ; => 7