(define (identity x) x) (syntax ($identity x) x) (define (bind-1-of-2 function constant) (lambda (x) (function constant x))) (syntax ($bind-1-of-2 function constant) (lambda ($x) (function constant $x))) (define (bind-2-of-2 function constant) (lambda (x) (function x constant))) (syntax ($bind-2-of-2 function constant) (lambda ($x) (function $x constant))) (define (S-combinator f g) (lambda (x) (f x) (g x))) (syntax ($S-combinator f g) (lambda ($x) (f $x) (g $x))) (define (compose f g) (lambda (x) (f (g x)))) (syntax ($compose f g) (lambda ($x) (f (g $x)))) (define (D-combinator function) (lambda (x) (function x x))) (syntax ($D-combinator function) (lambda ($x) (function $x $x))) (define (T-combinator f) (lambda (x y) (f y x))) (syntax ($T-combinator f) (lambda ($x $y) (f $y $x))) (define (if-combinator predicate f g) (lambda (x) (if (predicate x) (f x) (g x)))) (syntax ($if-combinator predicate f g) (lambda ($x) (if (predicate $x) (f $x) (g $x)))) (define (when-combinator predicate function) (lambda (x) (if (predicate x) (function x)))) (syntax ($when-combinator predicate function) (lambda ($x) (if (predicate $x) (function $x))))