Converter Python para Haskell / Lambda calculus
-
06-07-2019 - |
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)
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