Изменения

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

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

48 байт добавлено, 21:01, 6 декабря 2012
Нет описания правки
\begin{array}{r c l}
\langle Term \rangle & ::= & \langle Variable \rangle \\
& || & \langle Term \rangle \langle Term \rangle \\ & || & \lambda \langle Variable \rangle \to \langle Term \rangle\\ & || & ( \langle Term \rangle )\\
\langle Variable \rangle & ::= & \langle Char \rangle *\\
\end{array}
...и всего через 314007 <tex>\beta</tex>-редукций вы узнаете, что третье простое число {{---}} семь!
\subsection{===Списки}===
Для работы со списками чисел нам понадобятся следующие функции:
\begin* <tex>empty</tex> {{itemize} \item $empty$~--- }} возвращает пустой список \item $* <tex>cons$~</tex> {{--- }} принимает первый элемент и оставшийся список, склеивает их \item $* <tex>head$~</tex> {{--- }} вернуть голову списка \item $* <tex>tail$~</tex> {{--- }} вернуть хвост списка\end{itemize}
Список будем хранить в следующем виде: $<tex>\langle len, p_1^{a_1}p_2^{a_2}\ldots p_{len}^{a_{len}} \rangle$</tex>. При этом, голова списка будет храниться как показатель степени при $<tex>p_{len}$</tex><tex>\operatorname{empty} = \operatorname{pair}\ \operatorname{zero}\ \bar 1</tex> <tex>\operatorname{cons} = \lambda h \to \lambda t \to \operatorname{pair}\ (\operatorname{succ}\ (\operatorname{fst}\ t))\ (\operatorname{mult}\ (\operatorname{snd}\ t)\ (\operatorname{power}\ (\operatorname{ithPrime}\ (\operatorname{fst}\ t))\ h))</tex>
\begin{code}
empty = pair' `App` zero' `App` one'
cons = Lam "h" $ Lam "t" $ pair' `App` (succ' `App` (fst'' `App` Var "t"))
`App` (mult' `App` (snd'' `App` Var "t") `App` (power'
`App` (ithPrime `App` (fst'' `App` Var "t"))
`App` Var "h"
))
head = Lam "list" $ getExponent `App` (snd'' `App` Var "list")
`App` (ithPrime `App` (pred' `App` (fst'' `App` Var "list")))
403
правки

Навигация