Что такое код Python в Haskell и лямбда-вычислениях?
def f1():
x = 77
def f2():
print x
f2
f1
Моя попытка лямбда-исчисления
\x. 77 (\x.x)
Что такое код Python в Haskell и лямбда-вычислениях?
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
Рефакторинг, поскольку ввод-вывод просто запутывает проблему:
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 в лямбда-исчислении.
(\three.(\seven.(\ten.\f.\x.ten (seven f) (seven f x)) (\f.\x.three f (seven f x))) (\f.\x.f (three f (three f x)))) (\f.\x.f(f(f x)))
.
- person Rotsor; 13.10.2011
Я не знаю Python, поэтому могу ошибаться, но это моя интерпретация Haskell.
f1 = let x = 77 in show x
Или, поскольку у вас есть константа там
f1 = show 77
В лямбда-исчислении:
λprint. print 77
print
.
- person MtnViewMark; 15.06.2010
λ77. λprint. print 77
или, если перевернуть аргументы, λx.x
. :)
- person Rotsor; 13.10.2011