Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Функции обработки списков






 

Функция list

Объединяет элементы в список. Функция list— это основная функция, позволяющая создать список. Обращение к функции:

(list [< элемент1> [< элемент2>... [< элементМ> ]... ]])

В качестве аргументов, образующих список, могут выступать любые объекты, которыми оперирует LISP. Самый распространенный список— это список из двух или трех вещественных чисел, который представляет точку.

В качестве элементов списка могут выступать другие списки или точечные

пары.

Примеры:

· (list 3.62 1.49 4.12) возвращаеТ (3.62 1.49 4.12)

· (list 2.3 nil Т) возвращает (2.3 nil Т)

· (list 1 " crt" (list 0 12)) возвращает (l " crt" (0 l 2)) (третьим элементом нового списка является список из чисел 0, 1 и 2)

· (list 1 ' (0. " LINE")) возвращает (1 (0. " LINE")) (вторым элементом нового списка является точечная пара (0. " LINE"))

 

Функция append

Выполняет слияние списков в один.

(append [< список1> [< список2>... [< списокN> ]... ] ])

Все аргументы должны быть списками. Точечные пары в качестве аргументов не допускаются (в то же время точечные пары могут являться элементами объединяемых списков). Возвращаемое значение — список, в котором после элементов списка, указанного в качестве первого аргумента, добавлены элементы второго и последующего списков.

Если присутствует только один аргумент, то его значение и возвращается в качестве значения функции append. Если аргументы опущены, то возвращается nil.

Примеры:

· (append '(8 33 -6) (list -10 0 22)) возвращает (8 33 -6 -10 0 22)

· (append '(200 -6) '(nil т nil)) возвращает (200 -6 nil т nil)

· (append '(9 155 -26)) возвращает (9 155 -26)

· (append) возвращает nil

· (append nil '(l)) возвращает (l) (nil рассматривается как список нулевой длины, т. е. ' ())

· (append '(1 69 -3) '((62. 8))) возвращает (1 69 -3 (62. 8)) (в этом примере второй аргумент - это список, в котором единственным элементом является точечная пара (62. 8))

 

Функция nth

Извлекает из списка элемент по порядковому номеру (нумерация элементов списка выполняется слева направо и начинается с нуля).

(nth < номер> < список>)

Типы аргументов: < номер> — целое неотрицательное число, < список> — непустой список любой длины.

Возвращается значение элемента на соответствующем месте списка. Если номер превышает длину списка или равен ей, то возвращается nil.

Примеры:

· (nth 0 '(11 12 13 14)) возвращает 11

· (nth 1 '(11 12 13 14)) возвращает 12

· (nth 2 '(11 12 13 14)) возвращает 13

· (nth 3 '(11 12 13 14)) возвращает 14

· (nth 4 '(11 12 13 14)) возвращает nil

 

Функция reverse

Переворачивает список (образует новый список, в котором элементы переставлены в порядке, противоположном порядку элементов исходного списка).

(reverse < список>)

Тип аргумента: < список> — любой список (точечные пары не допускаются) или nil.

Возвращаемое значение — перевернутый список или nil.

Примеры:

· (reverse '(11 12 13 14 15)) возвращает (15 14 13 12 11)

· (reverse '(51)) возвращает (51)

· (reverse nil) возвращает nil

· (reverse '()) возвращает nil

 

Функция саr

Извлекает первый элемент списка, точечной пары или точечного списка.

(саr < список>)

Аргументом функции могут быть список, точечная пара, точечный список пли nil.

Если аргументом является список или точечный список, то возвращается первый элемент списка; если аргументом является точечная пара, то возвращается DXF- код (первый элемент точечной пары). Если в качестве аргумента передан nil (или эквивалентный ему пустой список), то возвращается nil.

Примеры:

· (car '(11 12 13 14 15)) возвращает 11

· (car '(0. " LINE")) возвращает 0

· (car '(2 4. 11)) возвращает 2

· (car '()) возвращает nil

 

Функция cdr

Извлекает подсписок без первого элемента или данные точечной пары.

(cdr < список>)

Аргументом функции могут быть список, точечная пара, точечный список или nil.

Если аргументом является список или точечный список, то возвращается такой же список, но без первого элемента; если аргументом является точечная пара, то возвращаются данные (второй элемент точечной пары). Если в качестве аргумента передан nil (или эквивалентный ему пустой список), то возвращается nil.

Примеры:

· (cdr ' (11 12 13 14)) возвращает (12 13 14)

· (cdr '(0. " LINE")) возвращает " LINE"

· (cdr '(2 4. 11)) возвращает (4. 11)

· (cdr '()) возвращает nil

 

Функции caar, cadr и аналогичные им

От функций саг и cdr путем их повторения в разных комбинациях от двух до четырех раз в языке AutoLISP образованы следующие функции (всего их двадцать восемь):

· (сааг < список>) —равносильно (car (саг < список>));

· (cadr < список>) —равносильно (car (cdr < список>));

· (cdar < список>) —равносильно (cdr (car < список>));

· (cddr < список>) —равносильно (cdr (cdr < список>));

· (caaar < список>) —равносильно (car (car (саг < список>)));

· (caadr < список>) —равносильно (car (car (cdr < список>)));

· (cadar < список>) —равносильно (car (cdr (car < список>)));

· (caddr < список>) —равносильно (car (cdr (cdr < список>)));

· (cdaar < список>) —равносильно (cdr (car (car < список>)));

· (cdadr < список>) —равносильно (cdr (car (cdr < список>)));

· (cddar < список>) —равносильно (cdr (cdr (car < список>)));

· (cdddr < список>) —равносильно (cdr (cdr (cdr < список>)));

· (caaaar < список>) —равносильно (car (car (car (car < список>))));

· (caaadr < список>) —равносильно (car (car (car (cdr < список>)))).

Аналогичным методом раскрываются оставшиеся функции

(caadar, caaddr, cadaar, cadadr, caddar, cadddr, cdaaar, cdaadr, cdadar, cdaddr, cddaar, cdddar, cddadr, cddddr).

Примеры:

· (cadr '(11 12 13 14)) возвращает 12

· (cddr '(11 12 13 14)) возвращает (13 14)

· (cdddr ' (11 12 13 14)) возвращает (14)

· (cadddr ' (11 12 13 14)) возвращает 14

· (cddddr '(11 12 13 14)) возвращает nil

· (cadr '((11 12 13 14))) возвращает nil

· (caar '((11 12 13 14))) возвращает 11

· (cadr '((11 12 13 14) (21 22 23 24))) возвращает (21 22 23 24)

· (cddr '((11 12 13 14) (21 22 23 24))) возвращает nil

· (cdadr ' ((11 12 13 14) (21 22 23 24))) возвращает (22 23 24)

· (cadadr ' ((11 12 13 14) (21 22 23 24))) возвращает 22

· (cddadr ' ((11 12 13 14) (21 22 23 24))) возвращает (23 24)

 

Функция cons

Добавляет к списку первый элемент или создает точечную пару.

(cons < аргумент1> < аргумент2>)

Если < аргумент2> является списком, то функция cons добавляет в него < аргумент1> в качестве нового первого элемента.

Если < аргумент2> является атомом (т. е. не списком), то функция cons создает точечную пару типа (< аргумент1>. < аргумент2>). функция cons является основным инструментом создания точечных пар, которые совместно с целочисленными первыми элементами используются в структуре примитивов AutoCAD.

Примеры:

· (cons 5.4 '(8.3 -1.0)) возвращает (5.4 8.3 -1.0)

· (cons " Happy" '(" New" " Year")) возвращает (" Happy" " New" " Year")

· (cons 5 1) возвращает (5. 1)

· (cons 8 " 0") возвращает (8. " 0")

· (cons 62 5) возвращает (62. 5)

· (cons 47 nil) возвращает (47) (nil интерпретируется как пустой список, т. е. '())

 

Функция member

Проверяет принадлежность элемента списку.

(member < элемент> < список>)

Типы аргументов: < элемент> — любой, < список> — список.

Если функция member обнаруживает < элемент> в аргументе < список>, то возвращает остаток списка, начиная с этого места; если < элемент> в аргументе < список> не обнаруживается, то функция возвращает nil.

Примеры:

(member 1 ' (3 5 1 2)) возвращает (12)

(member 4 ' (4 290 1 4)) возвращает (4 290 1 4)

(member 7 ' (4 290 1 4)) возвращает nil

(member 12 nil) возвращает nil

 

Функция assoc

Функция assoc применяется к сложному (ассоциированному) списку, в котором элементами являются списки или точечные пары, и выбирает из этих элементов (внутренних списков и точечных пар) тот, у которого первый элемент имеет заданное значение.

(assoc < код> < список>)

Если в аргументе < список> имеется несколько элементов, удовлетворяющих требуемому условию, то в качестве возвращаемого значения выбирается первый из них. Функция assoc— основной инструмент в операции, когда из списка с данными примитива AutoCAD нужно выбрать тот элемент, который содержит точечную пару с нужным DXF-кодом свойства (цвета, слоя, типа линий, веса и т. д.).

Возвращаемое значение – точечная пара или список, являющиеся элементами аргумента < список> и имеющие в качестве своего первого элемента заданный < код>.

Примеры:

· (assoc 8 '((8. " Walls") (6. " DASHED"))) возвращает
(8. " Walls")

· (assoc 7 '((8. " Walls") (6. " DASHED"))) возвращает nil

· (assoc 62 '((62. 4) (6. " DASHED"))) возвращает (62. 4)

· (assoc 10 '((10 51.2 6.5 2.7) (10 122.01 72.94 80.39))) возвращает (10 51.2 6.5 2.7)

 

 

Функция apply

Применяет функцию, имя которой задано в первом аргументе после апострофа, поочередно ко всем элементам списка, заданного аргументом < список>.

(apply '< функция> < список>)

 

Примеры:

· apply '* (list 2 4 5)) равносильно (* 2 4 5), поэтому возвращает 40

· (apply 'min (list 12 7 20)) возвращает 7

· (apply 'command (list CIRCLE" " 75, 64" 120.0)) выполняет команду построения окружности по центру и радиусу и возвращает nil

Последний пример показывает, что функция apply удобна, когда определенную операцию нужно выполнить над аргументами, количество которых заранее не известно. Следует сформировать список, к которому затем нужно применить функцию apply с именем требуемой функции в качестве первого аргумента. Читателю следует обратить внимание на употребление апострофа перед аргументом.

 

Функция mарсаr

Применяет функцию, имя которой задано аргументом < функция>, сначала к первым элементам каждого из последующих аргументов, являющихся списками (< список1>,..., < списокы>), затем— ко вторым элементам и т. д.; результаты объединяются в новый список, который является возвращаемым значением.

(mарсаr '< функция> < список1> [< список2>... [< списокN> ]... ])

Примеры:

· (mарсаr '* '(0 4) '(8 3)) возвращает (0 12), т. к. первый элемент результирующего списка вычисляется как (* 0 8), а второй — как (* 4 3)

· (mарсаr '(9 3) '(4 2)) возвращает (5 1), т. к. первый элемент результирующего списка вычисляется как (- 9 4), а второй — как (- 3 2)

 

Функция foreach

Функция foreach позволяет организовать циклическое выполнение выражений (их может быть несколько), поочередно подставляя вместо переменной цикла (аргумента < имя>) элементы списка.

(foreach < имя> < список> [< выражение1> [< выражение2>...

[< выражениеN> ]...]])

Аргументы: < имя> — символ, играющий роль временной переменной цикла; < спи сок> — список, элементы которого поочередно присваиваются в качестве значения переменной < имя>; < выражение1>,..., < вьражениеN> — выполняемые выражения.

Функция foreach возвращает значение последнего вычисленного выражения. Если аргументы < выражение1>,..., < выражениеN> не заданы, то функция возвращает nil.

Пример:

(setq s1 0 s2 1)

(foreach р '(1 2 3 4 5 6)

(setq s1 (+ s1 p))

(setq s2 (* s2 p))

)

возвращает 720 (результат вычисления s2 — произведения чисел списка); кроме того, в переменной s1 сформируется сумма чисел списка (21).

 

Функция eval

Функция eval позволяет вычислить (evaluate) аргумент как выражение. Если аргумент является списком, то в нем на первом месте должно стоять имя функции.

(eval < выражение>)

Пример:

(setq mylist (list 'max 2.4 3.1 1.47))

(eval mylist) возвращает 3.l (вычисляется выражение (max 2.4 3.1 1.47))

 

Функция quote

Функция quote является обратной по отношению к функции eval и позволяет обрабатывать выражение, не вычисляя его. Сокращенным вариантом имени функции quote является апостроф.

(quote < элементы выражения>)

Примеры:

(quote 6 7 8 2 1) возвращает (6 7 8 2 1)

' (16 23 90) возвращает (16 23 90)

' (0. " ARC") возвращает (0. " ARC")

Апостроф очень часто используется при построении постоянных списков и точечных пар.

 

Функция last

Функция last возвращает последний элемент списка, заданного аргументом < список>, или nil, если список пуст.

(last < список>)

Примеры:

· (last ' ()) возвращает nil

· (last '(54 12 20)) возвращает 20

· (last (list (11 23) (12 20))) возвращает (12 20)

 

Функция subst

Заменяет в списке старый элемент (все вхождения) на новый.

(subst < новый> < старый> < список>)

Аргументы: < новый> и < старый> — любые символы LISP; < список> — это список в котором элемент < старый> нужно заменить на элемент < новый>.

Возвращаемое значение — список с замененным, возможно, элементом.

Примеры:

· (subst 7 2 ' (22 3 2 0)) возвращает (22 3 7 0)

· (subst 7 2 '(3 4 5 1)) возвращает (3 4 5 1)

· (subst 7 2 '(2 2 2 0)) возвращает (7 7 7 0)

· (subst " 5" 11 '(11 5 17 4)) возвращает (" 5" 5 17 4)

 

Функция length

Возвращает длину (количество элементов) списка.

(length < список>)

Аргумент— список (может быть nil). Точечные пары и точечные списки не допускаются.

Возвращаемое значение — неотрицательное целое число.

Примеры:

· (length '()) возвращает 0

· (length nil) возвращает 0

· (length '(4 2 1 100 4)) возвращает 5

· (length '((4 2 1 100 4))) возвращает 1

 

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.021 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал