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)
Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top