Скачиваний:
8
Добавлен:
01.05.2014
Размер:
8.17 Кб
Скачать

Шаг 8. Базисные функции для работы со списками. Элементарные селекторы     На этом шаге мы начнем изучать функции, используемые для работы со списками.

    В языке LISP для построения и анализа списков существуют базисные функции. С их помощью описывается система аксиом языка (алгебру обработки списков).     Базисными функциями являются: CAR, CDR, CONS, ATOM и EQ. Отметим, что предикаты ATOM и EQ мы уже рассмотрели. Таблица 1. Функции для работы со списками в muLISP81 Функция Назначение CAR Возвращает первый элемент списка (голову списка). CDR Возвращает список без первого элемента (хвост списка). CAAR Возвращает голову головы списка. CDAR Возвращает хвост головы списка. CADR Возвращает голову хвоста (второй элемент списка). CDDR Возвращает хвост хвоста списка. CADDR Возвращает голову хвоста хвоста (третий элемент списка). CDDDR Возвращает хвост хвоста хвоста списка. CAAAR Возвращает голову головы головы списка. CDAAR Возвращает хвост головы головы списка. CADAR Возвращает голову хвоста головы списка. CDDAR Возвращает хвост хвоста головы списка. CAADR Возвращает голову головы хвоста списка. CDADR Возвращает хвост головы хвоста списка.     1. Функция CAR (произносится "кар") возвращает в качестве значения первый элемент списка (голову списка). Например: $ (CAR (A B C D E)) A $ (CAR (A.B) . C)) (A.B)     Если в качестве аргумента функции CAR выступает литеральный атом, то результат выполнения функции зависит от конкретного диалекта. В muLISP применение CAR к атому разрешено, в других диалектах (например, Common LISP, Standard LISP) это вызовет сообщение об ошибке.

В начало таблицы     2. Функция CDR (если в имени нет гласных звуков, как в CDR, то мы делаем все от нас зависящее, чтобы облегчить произношение, слово CDR можно произносить примерно так: "каддэр" (сudder) или "куд-эр"), примененная к списку, возвращает список, полученный из исходного отбрасыванием первого элемента (хвост списка), например: $ (CDR (A B C D E)) (B C D E) $ (CDR ((A.B) . C)) C     Хвостом списка, состоящего из одного элемента, является пустой список (NIL).     Заметим, что в muLISP85 CDR-элементом числа является признак и тип числа.     Функция CDR от атома возвращает список свойств этого атома.     Необычные имена функций CAR и CDR возникли по историческим причинам. Эти имена являются сокращениями от наименований регистров Contents of Address portion of Register (CAR) и Contents of Decrement portion of Register (CDR) вычислительной машины IBM 704. Автор языка LISP Джон Маккарти (США) реализовал первую LISP-систему именно на этой машине и использовал регистры CAR и CDR для хранения указателей на голову и хвост списка.     Заметим, что, комбинируя селекторы CAR и CDR, можно выделять элементы списка. Например: $ (CDR (CDR (CAR ((A B C) (D E) (F))))) (C)     Комбинации вызовов CAR и CDR образуют уходящие в глубину списка обращения, и в muLISP используется для этого более короткая запись: желаемую комбинацию вызовов CAR и CDR можно записать в виде одного вызова функции: (C...R Список).     Вместо многоточия записывается нужная комбинация из букв A (для функции CAR) и D (для функции CDR), например: вместо (CADR X) записывается (CAR (CDR X)).

В начало таблицы     3. CAAR - голова головы списка.     4. CDAR - хвост головы списка.     5. CADR - голова хвоста (второй элемент списка).     6. CDDR - хвост хвоста списка.     7. CADDR - голова хвоста хвоста (третий элемент списка).     8. CDDDR - хвост хвоста хвоста списка.     9. CAAAR - голова головы головы списка.     10. CDAAR - хвост головы головы списка.     11. CADAR - голова хвоста головы списка.     12. CDDAR - хвост хвоста головы списка.     13. CAADR - голова головы хвоста списка.     14. CDADR - хвост головы хвоста списка.     Отметим, что в диалекте muLISP81 записать в сокращенном виде выражение для четвертого элемента списка уже не удастся: приходится писать (CAR (CDDDR LST)).

    На следующем шаге мы продолжим рассмотрение селекторов, в частности, приведем перечень селекторов, имеющихся в muLISP85.

Предыдущий шаг Содержание Следующий шаг

Соседние файлы в папке Язык программирования ЛИСП