The logician Alonzo Church invented a system of representing non-negative integers entirely using functions. Here are the definitions of 0, and a function that returns 1 more than its argument:
def zero(f):
return lambda x: x
def successor(n):
return lambda f: lambda x: f(n(f)(x))
This representation is known as Church numerals . Define one and two directly, which are also functions. To get started, apply successor to zero . Then, give a direct definition of the add function (not in terms of repeated application of successor ) over Church numerals. Finally, implement a function church_to_int that converts a church numeral argument to a regular Python int.
Solution:
def one(f):
return successor(zero)(f)
def two(f):
return successor(one)(f)
def add(m,n,f):
return lambda x: m(f)(n(f)(x))
def church_to_int(m,f,x):
tmp=zero
n=0
while tmp(f)(x)!=m(f)(x):
tmp=successor(tmp)
n=n+1
return n
Not so sure whether I can code like this.