Converti Python in calcolo Haskell / Lambda
-
06-07-2019 - |
Domanda
Qual è il codice Python nel calcolo di Haskell e Lambda?
def f1():
x = 77
def f2():
print x
f2
f1
Il mio tentativo nel calcolo lambda
\x. 77 (\x.x)
Soluzione
Haskell:
f1 :: IO ()
f1 = let x = 77
f2 = print x
in f2
main :: IO ()
main = f1
O per essere più simile al tuo calcolo lambda:
f1 :: Int
f1 = let f2 = x
x = 77
in f2
main :: IO ()
main = print f1
Altri suggerimenti
In Haskell:
f1 = f2
where x = 77
f2 = print x
Refactoring, poiché IO ??confonde il problema:
f1 = f2
where x = 77
f2 = x
Refactoring:
f1 = x
where x = 77
Refactoring, poiché vuoi la variabile?
f1 = (\x -> x) 77
Riduzione beta:
f1 = 77
E hai il tuo programma in Haskell.
Il calcolo Lambda non ha valori numerici numerici (a differenza di Haskell), quindi dobbiamo usare numeri della chiesa . Quindi compilando "77" al calcolo lambda:
f1 = \f.\x. f (f (f (f ( ... ) x)))
E c'è il tuo programma Python in Lambda Calculus.
Non conosco Python, quindi potrei sbagliarmi completamente, ma questa è la mia interpretazione di Haskell.
f1 = let x = 77 in show x
Oppure, poiché hai una costante lì
f1 = show 77
Nel calcolo lambda:
λprint. print 77