Преобразование Python в Haskell/лямбда-исчисление
-
06-07-2019 - |
Вопрос
Что такое код Python в исчислении Haskell и Lambda?
def f1():
x = 77
def f2():
print x
f2
f1
Моя попытка лямбда-исчисления
\x. 77 (\x.x)
Решение
Хаскелл:
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
Другие советы
В Хаскеле:
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.
В лямбда-исчислении нет числовых литералов (в отличие от Haskell), поэтому мы должны использовать Церковные цифры.Итак, компиляция «77» в лямбда-исчисление:
f1 = \f.\x. f (f (f (f ( ... ) x)))
И вот ваша программа на Python в Lambda Calculus.
Я не знаю python, поэтому могу ошибаться, но это моя интерпретация на Haskell.
f1 = let x = 77 in show x
Или, так как у вас есть константа там
f1 = show 77
В лямбда-исчислении:
λprint. print 77
Не связан с StackOverflow