logo
Функционально-логическое программирование Prolog, LISP

14. Методы обработки списков (лисп).

Списком в Лиспе называется упорядоченная последовательность S-выражений, заключенная в круглые скобки. Элементы списка отделяются друг от друга пробелами.

Одной из отличительных особенностей Лиспа является единая форма представления данных и программного кода (функций). Для обозначения списка, используемого как данные, и блокировки вычислений в Лиспе определена функция QUOTE (‘).

БАЗОВЫЕ ФУНКЦИИ ОБРАБОТКИ СПИСКОВ.

В Лиспе для построения, разбора и анализа списков существуют простые базовые функции:

1) Функции-селекторы CAR и CDR.

2) Функцию-конструктор CONS.

3) Предикаты ATOM, EQ, EQUAL.

СЕЛЕКТОРОМ называется функция, осуществляющая выборку элемента объекта данных.

Функция CAR возвращает голову списка, CDR - хвост списка. Функции CAR и CDR являются обратными для конструктора CONS.

Путем комбинации селекторов CAR и CDR можно выделять произвольный элемент списка.

КОНСТРУКТОРОМ называется функция, осуществляющая построение объекта данных. Функция CONS строит новый список из переданных ей в качестве аргументов выражения и списка. При этом первый аргумент включается в список-результат в качестве головы, второй – в качестве хвоста.

Функция LIST создает список из произвольных элементов. Вызов list эквивалентен суперпозиции вызовов CONS, причем вторым аргументом последнего вызова является nil, который служит основой для наращивания списка. (list ‘a ‘b ‘c) эквивалентно (cons ‘a (cons ‘b (cons ‘c nil))).

Для выборки элементов списков в Лиспе существуют функции выделения заданного элемента : FIRST, SECOND, THIRD, FOURTH, ... last и более общая функция NTH, выделяющая n-й элемент списка (nth n список).

ПРЕДИКАТАМИ в функциональном программировании называются функции, которые проверяют выполнение некоторого условия и возвращают логическое значение T или NIL.

ATOM, EQ и EQUAL являются базовыми предикатами Лиспа. С их помощью и используя другие базовые функции, можно задавать более сложные предикаты, которые будут проверять наличие более сложных свойств.

Предикат ATOM проверяет, является ли аргумент атомом.

Предикат EQ проверяет тождественность двух атомарных выражений.

Предикат EQUAL проверяет тождественность произвольных выражений.

.

.