HW--Church numerals

1150 ワード

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.