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)
¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top