Pergunta

O que é o código Python em Haskell e Lambda calculus?

def f1():
   x = 77
   def f2():
      print x
   f2
f1

Minha tentativa no lambda calculus

\x. 77 (\x.x)
Foi útil?

Solução

Haskell:

f1 :: IO ()
f1 = let x = 77
         f2 = print x
     in f2

main :: IO ()
main = f1

Ou para ser mais parecido com o seu cálculo lambda:

f1 :: Int
f1 = let f2 = x
         x = 77
     in f2

main :: IO ()
main = print f1

Outras dicas

Em Haskell:

f1 = f2
    where x  = 77
          f2 = print x

A refatoração, desde IO apenas confunde a questão:

f1 = f2
    where x  = 77
          f2 = x

refatoração:

f1 = x
    where x = 77

A refatoração, desde que você quer a variável?

f1 = (\x -> x) 77

Beta reduzir:

f1 = 77

E você tem o seu programa em Haskell.

Lambda calculus não tem literais numéricos (ao contrário Haskell), por isso devemos usar numerais Igreja . Então compilação "77" para cálculo lambda:

f1 = \f.\x. f (f (f (f ( ... ) x)))

E há seu programa Python no Lambda Calculus.

Eu não sei python, para que eu pudesse estar completamente errado, mas esta é a minha interpretação Haskell.

f1 = let x = 77 in show x

Ou, uma vez que você tem uma constante lá

f1 = show 77

Em cálculo lambda:

λprint. print 77
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top