Convertir Python a Haskell / cálculo Lambda
-
06-07-2019 - |
Pregunta
¿Cuál es el código de Python en el cálculo de Haskell y Lambda?
def f1():
x = 77
def f2():
print x
f2
f1
Mi intento en el cálculo lambda
\x. 77 (\x.x)
Solución
Haskell:
f1 :: IO ()
f1 = let x = 77
f2 = print x
in f2
main :: IO ()
main = f1
O para ser más como tu cálculo lambda:
f1 :: Int
f1 = let f2 = x
x = 77
in f2
main :: IO ()
main = print f1
Otros consejos
En Haskell:
f1 = f2
where x = 77
f2 = print x
Refactorización, ya que IO simplemente confunde el problema:
f1 = f2
where x = 77
f2 = x
Refactorización:
f1 = x
where x = 77
Refactorización, ya que quiere la variable?
f1 = (\x -> x) 77
Reducción beta:
f1 = 77
Y tienes tu programa en Haskell.
El cálculo Lambda no tiene literales numéricos (a diferencia de Haskell), por lo que debemos usar números de iglesia . Así compilando '' 77 '' al cálculo lambda:
f1 = \f.\x. f (f (f (f ( ... ) x)))
Y ahí está su programa Python en Lambda Calculus.
No conozco Python, así que podría estar completamente equivocado, pero esta es mi interpretación de Haskell.
f1 = let x = 77 in show x
O, ya que tienes una constante allí
f1 = show 77
En cálculo lambda:
λprint. print 77