Основы функционального программирования


Обработка множеств и последовательностей


При реализации недетерминированных моделей обычно используются средства обработки множеств и последовательностей. В современных системах функционального программирования такие средства достаточно разнообразны. Здесь приведены лишь наиболее очевидные:

Member — выделяет часть списка, начиная с заданного объекта, Nil — если такого объекта в списке нет.

(member ‘a (b a c)) ;= (a c) (member ‘d (b a c)) ;= Nil

Set-difference — строит список элементов первого аргумента, не входящих во второй аргумент. Имеет деструктивный аналог — nset-difference.

Set-exlusive-or — строит список элементов первого или второго аргумента, но не входящих в оба сразу. Имеет деструктивный аналог — nset-exlusive-or.

Union — объединение множеств — строит список элементов первого или второго аргумента. Имеет деструктивный аналог — nunion.

Intersection — пересечение множеств — строит список элементов первого, входящих во второй аргумент. Имеет деструктивный аналог — nintersection.

Delete — строит последовательность из элементов второго аргумента за исключением совпадающих с первым аргументом. Имеет деструктивный аналог — remove.

(delete 1 ‘(1 2 1 3 1 4)) ;= (2 3 4)

Concatenate — строит новую последовательность заданного типа из своих аргументов, начиная со второго, при этом копирует их, кроме последнего. Для списков имеет деструктивный аналог — nconc.

Elt— выдает элемент последовательности по заданному номеру.

Find — отыскивает заданный символ в последовательности, можно управлять направлением поиска.

Sort — упорядочивает последовательность по заданному предикату.

(sort ‘(1 2 1 3 1 4) #’<) ;= (1 1 1 2 3 4)

Map — отображает с помощью данной функции ряд последовательностей в новую последовательность типа, заданного первым аргументом. Отображающая функция — второй аргумент. Кратность применения отображающей функции определяется длиной кратчайшего аргумента, начиная с третьего. Имеет деструктивный аналог map-into, строящий результат из первого аргумента.

Reverse — обращает последовательность. Имеет деструктивный аналог nreverse.

Position — выдает номер позиции первого вхождения заданного символа в последовательность.

Substitute — выполняет систематическую замену "старого" символа на "новый" в последовательности. Имеет деструктивный аналог — nsubstitute.

Maphash — методично применяет отображающую функцию двух аргументов к каждой паре из ключа и соответствующего значения в хэш-таблице.


Содержание раздела