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)
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top