Quel est le code Python dans le calcul de Haskell et Lambda?Convertir le calcul Python en Haskell/Lambda
def f1():
x = 77
def f2():
print x
f2
f1
Ma tentative de calcul lambda
\x. 77 (\x.x)
Quel est le code Python dans le calcul de Haskell et Lambda?Convertir le calcul Python en Haskell/Lambda
def f1():
x = 77
def f2():
print x
f2
f1
Ma tentative de calcul lambda
\x. 77 (\x.x)
Haskell:
f1 :: IO()
f1 = let x = 77
f2 = print x
in f2
main :: IO()
main = f1
Ou pour être plus comme votre lambda-calcul:
f1 :: Int
f1 = let f2 = x
x = 77
in f2
main :: IO()
main = print f1
Je ne sais pas python, donc je pourrais être complètement mal, mais c'est mon interprétation Haskell.
f1 = let x = 77 in show x
Ou, puisque vous avez une constante, il
f1 = show 77
Dans le calcul lambda:
λprint. print 77
Le programme Python ne prend pas d'argument pour la fonction 'print'. – MtnViewMark
Oui, implicitement. – Apocalisp
Alors la traduction correcte est 'λ77. λprint. print 77', ou, si vous retournez les arguments, 'λx.x'. :) – Rotsor
Dans Haskell:
f1 = f2
where x = 77
f2 = print x
refactorisation, depuis IO seulement confond le problème:
f1 = f2
where x = 77
f2 = x
refactorisation:
f1 = x
where x = 77
refactorisation, puisque vous voulez la variable?
f1 = (\x -> x) 77
Beta réduire:
f1 = 77
Et vous avez votre programme Haskell.
Le calcul lambda n'a pas de littéraux numériques (contrairement à Haskell), nous devons donc utiliser Church numerals. Donc, la compilation "77" au calcul lambda:
f1 = \f.\x. f (f (f (f (...) x)))
Et il y a votre programme Python dans Lambda calcul.
+1 juste pour utiliser les chiffres de l'église. J'ai lollé. –
Je suppose que nous pouvons l'optimiser à '(\ trois. (\ Dix. \ F. \ X.ten (sept f) (sept fx)) (\ f. \ X.three f (sept fx))) (\ f. \ xf (trois f (trois fx)))) (\ f. \ xf (f (fx))) '. – Rotsor
Le calcul lambda n'a aucun concept d'état. L'impression implique l'état. – codebliss
Je présume que vous avez l'intention de retourner f2 et d'appeler f1, car comme écrit, votre f1 renvoie None et n'est pas appelé. – cthulahoops
Voir aussi http://blog.sigfpe.com/2008/09/on-writing-python-one-liners.html – sdcvvc