Здесь в псевдокоде:
класс Pair {
Объект оставлен,
Объект справа}.
функция cons (Объект слева, Объект справа) {вернуть новую пару (слева, справа)};
Итак,
1. минусы ('A,' B) => пара ('A,' B)
2. минусы ('A, NIL) => Пара (' A, NIL)
3. минусы (NIL, 'A) => Пара (NIL,' A)
4. cons ('A, cons (' B, NIL)) => Пара ('A, Pair (' B, NIL))
5. cons (cons ('A' B), NIL)) => Пара (Pair ('A, B), NIL)
Давайте рассмотрим права и права во всех случаях:
1. 'A и' B - атомы, и вся пара не является списком, поэтому (const 'a' b) дает (a. B) в схеме
2. NIL - пустой список, а 'A - атом, (cons' a '()) - список (a)
3. NIL и 'A, как указано выше, но слева есть список (!), (Cons' () 'a) дает пару ((). A)
4. Простой случай, у нас есть правильный список здесь (а б).
5. Правильный список, голова - пара (a. B), хвост пуст.
Надеюсь, у вас есть идея.
Относительно вашей функции. Вы работаете над LIST, но создаете ПАРЫ.
Списки являются парами (пар), но не все пары являются списками! Чтобы быть в списке, пара должна иметь NIL в качестве хвоста.
(б) пара и список
(a. b) пара не указана
Несмотря на недостатки, ваша функция имеет ошибки, она просто не работает '(a b a a c c d). Поскольку это не относится к вашему вопросу, я не буду публиковать здесь исправления.