Conversion de calcul Python en calcul Haskell / Lambda
-
06-07-2019 - |
Question
Quel est le code Python dans les calculs Haskell et Lambda?
def f1():
x = 77
def f2():
print x
f2
f1
Ma tentative de calcul lambda
\x. 77 (\x.x)
La solution
Haskell:
f1 :: IO ()
f1 = let x = 77
f2 = print x
in f2
main :: IO ()
main = f1
Ou pour ressembler davantage à votre calcul lambda:
f1 :: Int
f1 = let f2 = x
x = 77
in f2
main :: IO ()
main = print f1
Autres conseils
Dans Haskell:
f1 = f2
where x = 77
f2 = print x
Refactoring, car IO ne fait que brouiller les cartes:
f1 = f2
where x = 77
f2 = x
Refactoring:
f1 = x
where x = 77
Refactoring, puisque vous voulez la variable?
f1 = (\x -> x) 77
Bêta réduire:
f1 = 77
Et vous avez votre programme en Haskell.
Le calcul lambda n'a pas de littéraux numériques (contrairement à Haskell), nous devons donc utiliser les chiffres d'église . Pour compiler " 77 " au lambda calcul:
f1 = \f.\x. f (f (f (f ( ... ) x)))
Et il y a votre programme Python dans Lambda Calculus.
Je ne connais pas le python, je peux donc me tromper complètement, mais voici mon interprétation de Haskell.
f1 = let x = 77 in show x
Ou, puisque vous avez une constante là-bas
f1 = show 77
Dans le calcul lambda:
λprint. print 77