Изменения

Перейти к: навигация, поиск

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

321 байт добавлено, 19:13, 6 декабря 2012
Нет описания правки
<tex>(\operatorname{mult} \bar 3 \bar 3) (+1) 0 \equiv 9</tex>
\subsection{===Возведение в степень}===
It's a kind of magic
<tex>\beginoperatorname{codepower}power' = Lam "\lambda n" $ Lam "\to \lambda m" $ Var "\to m" `App` Var "n"\end{code}</tex>
|<tex>(\operatorname{power three (succ three)) } \bar 3 (+1) 0 == | \evaloperatorname{(power three (succ three} \bar 3)) (+1) 0}\equiv 81</tex>
\subsection{===Логические значения}===<tex>\beginoperatorname{codetrue}true' = Lam "\lambda a" $ Lam "\to \lambda b" $ Var "\to a"</tex> <tex>\operatorname{false' } = Lam "\lambda a" $ Lam "\to \lambda b" $ Var "\to b"\end{code}</tex>
Функции двух аргументов, возвращающие первый и второй, соответственное, аргументы.
Забавный факт: $<tex>\operatorname{false } \equiv_\alpha \operatorname{zero}$. Эти функции сделаны такими для того, чтобы красиво написать функцию $<tex>\operatorname{if$}</tex>:
<tex>\beginoperatorname{codeif}if'' = Lam "\lambda p" $ Lam "\to \lambda t" $ Lam "\to \lambda e" $ Var "\to p" `App` Var "t" `App` Var "e"\end{code}</tex>
Если ей в качестве первого аргумента дадут $<tex>\operatorname{true$}</tex>, то вернётся $<tex>t$</tex>, иначе~{{--- $}} <tex>e$</tex>.
Стандартные функции булевой логики:
<tex>\beginoperatorname{codeand}and' = Lam "\lambda n" $ Lam "\to \lambda m" $ \to \operatorname{if'' `App` Var "} n" `App` Var "m" `App` \operatorname{false'}</tex> <tex>\operatorname{or' } = Lam "\lambda n" $ Lam "\to \lambda m" $ \to \operatorname{if'' `App` Var "} n" `App` \operatorname{true' `App` Var "} m"</tex> <tex>\opeartorname{not' } = Lam "\lambda b" $ \to \opeartorname{if'' `App` Var "} b" `App` \operatorname{false' `App` true'} \endoperatorname{codetrue}</tex>
Ещё одной важной функцией является функция проверки, является ли число нулём:
<tex>\beginoperatorname{codeisZero}isZero' = Lam "\lambda n" $ Var "\to n" `App` (Lam "\lambda c" \to \operatorname{false'}) `App` true'\endoperatorname{codetrue}</tex>
Функция выглядит несколько странно. |<tex>\lambda c -> \operatorname{false|~}</tex> {{--- }} функция, которая независимоот того, что ей дали на вход, возвращает $<tex>\operatorname{false$}</tex>. Тогда, если в качестве $<tex>n$</tex>
будет дан ноль, то функция, по определению нуля, не выполнится ни разу, и будет
возвращено значение по умолчанию $<tex>\operatorname{true$}</tex>. Иначе же функция будет запущено, и вернётся $<tex>\operatorname{false$}</tex>.
\subsection{Пара}
Анонимный участник

Навигация