Конвертировать Python в исчисление Haskell / Lambda - PullRequest
1 голос
/ 29 ноября 2009

Что такое код Python в исчислении Хаскелла и Лямбды?

def f1():
   x = 77
   def f2():
      print x
   f2
f1

Моя попытка лямбда-исчисления

\x. 77 (\x.x)

Ответы [ 4 ]

8 голосов
/ 14 июня 2010

В Хаскеле:

f1 = f2
    where x  = 77
          f2 = print x

Рефакторинг, поскольку IO просто запутывает проблему:

f1 = f2
    where x  = 77
          f2 = x

Рефакторинг:

f1 = x
    where x = 77

Рефакторинг, так как вы хотите переменную?

f1 = (\x -> x) 77

Бета-уменьшение:

f1 = 77

И у вас есть программа на Хаскеле.

Лямбда-исчисление не имеет числовых литералов (в отличие от Haskell), поэтому мы должны использовать Церковные цифры . Таким образом, составление "77" для лямбда-исчисления:

f1 = \f.\x. f (f (f (f ( ... ) x)))

А вот ваша программа на Python в Lambda Calculus.

3 голосов
/ 29 ноября 2009

Haskell:

f1 :: IO ()
f1 = let x = 77
         f2 = print x
     in f2

main :: IO ()
main = f1

Или быть более похожим на ваше лямбда-исчисление:

f1 :: Int
f1 = let f2 = x
         x = 77
     in f2

main :: IO ()
main = print f1
1 голос
/ 29 ноября 2009

В лямбда-исчислении:

λprint. print 77
1 голос
/ 29 ноября 2009

Я не знаю python, поэтому могу ошибаться, но это моя интерпретация на Haskell.

f1 = let x = 77 in show x

Или, так как у вас там есть постоянная

f1 = show 77
...