Студопедия — Функции обработки списков
Студопедия Главная Случайная страница Обратная связь

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

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






 

Функция 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

 

 







Дата добавления: 2014-12-06; просмотров: 854. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Реформы П.А.Столыпина Сегодня уже никто не сомневается в том, что экономическая политика П...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

Внешняя политика России 1894- 1917 гг. Внешнюю политику Николая II и первый период его царствования определяли, по меньшей мере три важных фактора...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

БИОХИМИЯ ТКАНЕЙ ЗУБА В составе зуба выделяют минерализованные и неминерализованные ткани...

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия