; Church Numerals ; --------------- ; But how to represent numbers in lambda calculus? Alonso Church, the ; logician who invented lambda calculus suggested the following method: ( define zero ( lambda (f ) ( lambda (x ) x ))) ( define one ( lambda (f ) ( lambda (x ) (f x )))) ( define two ( lambda (f ) ( lambda (x ) (f (f x ))))) ( define three ( lambda (f ) ( lambda (x ) (f (f (f x )))))) ; We take f and execute it on x N times ; Converting Church numerals to regular integers: ( define (church->int church ) ( (church ( lambda (a ) ( + a 1 )) ) 0 ) ) ; Finding the successor to a Church numeral: ; Let's take f and execute it on n one more time: ( define succ ( lambda (n ) ( lambda (f ) ( lambda (x ) (f ((n f ) x )) ) ) ) ) ; Converting an integer to a Church numeral ( define (int->church n ) ( if ( = n 0 ) zero (succ (int->church ( - n 1 ))) ) )