Математическое введение в декларативное программирование. Зюзысов В.М. - 60 стр.

UptoLike

Составители: 

(λx. x true) (λf. f E
1
E
2
)
β
(λf. f E
1
E
2
) true
β
true E
1
E
2
β
(λx. λy. x) E
1
E
2
β
(λy.E
1
) E
2
β
E
1
Пара есть структура данных с двумя компонентами. Обобщенная структура с n
компонентами называется n–кой или кортежем и легко определяется через пары.
(E
1
, E
2
, …, E
n
) (E
1
, (E
2
, (…(E
n
–1
, E
n
)…)))
(E
1
, E
2
, …, E
n
) есть nкортеж с компонентами E
1
, E
2
, …, E
n
и длиной n. Пары суть кортежи
длиной 2. С помощью следующих выражений получаем доступ к отдельным компонентам
кортежа.
E1 fst E
E2 fst (snd E)
Ei fst (snd (snd (…(snd E)…))), если i меньше длины E
i–1 раз
En snd (snd (…(snd E)…)), если n равно длине E
n–1 раз
Проверим, что эти определения правильно работают:
(E
1
, E
2
, …, E
n
)1
fst (E
1
, (E
2
, (…(E
n
–1
, E
n
)…)))
E
1
(E
1
, E
2
, …, E
n
)2
fst (snd (E
1
, (E
2
, (…(E
n
–1
, E
n
)…))))
fst (E
2
, (…(E
n
–1
, E
n
)…)))
E
2
В общем случае (E
1
, E
2
, …, E
n
)i = E
i
для 1 i n.
9.2.3 Числа
Существует много способов для определения чисел в виде λвыражений; каждый
способ имеет свои преимущества и недостатки [1]. Нашей целью является определить
комбинатор <n> для представления натурального числа n. Необходимо определить также
примитивные арифметические операции в терминах λвыражений. Например, нам необ-
ходимы λвыражения suc, pre, add и iszero, представляющие функции следования n
n+1, предшествования n n–1, сложения и тест для нуля, соответственно. Эти λ
выражения представляют числа корректно, если они обладают следующими свойствами:
suc <n> = <n+1> (для всех натуральных чисел n);
pre <n> = <n–1> (для всех натуральных чисел n>0);
60