lambda calculus

mars 2018 algorithme, code

$\lambda$ calculus

En regardant la vidéo de Computerphile:
https://www.youtube.com/watch?v=eis11j_iGMs

In [1]:
vrai = lambda x, y: x
faux = lambda x, y: y
In [22]:
vrai.str = 'vrai'
faux.str = 'faux'
In [10]:
non = lambda f: f( faux, vrai )
In [24]:
print( non(vrai).str )
print( non(faux).str )
faux
vrai
In [33]:
et = lambda x, y: x( y, x )
In [32]:
print( et(faux, faux).str )
print( et(faux, vrai).str )
print( et(vrai, faux).str )
print( et(vrai, vrai).str )
faux
faux
faux
vrai
In [34]:
ou = lambda x, y: non( et( non(x), non(y) ) )
In [35]:
print( ou(faux, faux).str )
print( ou(faux, vrai).str )
print( ou(vrai, faux).str )
print( ou(vrai, vrai).str )
faux
vrai
vrai
vrai
In [36]:
ou = lambda x, y: x( x, y )
In [37]:
print( ou(faux, faux).str )
print( ou(faux, vrai).str )
print( ou(vrai, faux).str )
print( ou(vrai, vrai).str )
faux
vrai
vrai
vrai
In [3]:
loop = lambda x:x(x)
In [5]:
loop( lambda x:x+1 )
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-4d1cb14976a7> in <module>()
----> 1 loop( lambda x:x+1 )

<ipython-input-3-4060cdae6a00> in <lambda>(x)
----> 1 loop = lambda x:x(x)

<ipython-input-5-4d1cb14976a7> in <lambda>(x)
----> 1 loop( lambda x:x+1 )

TypeError: unsupported operand type(s) for +: 'function' and 'int'
In [ ]: