Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Лекция 12. Логические и арифметические функции. Работа со списками



 

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

Для каждой функции указывается синтаксис, количество и типы аргументов, а также тип возвращаемого значения.

Функция +

Вычисляет сумму чисел.

(+ [< число1> [< число2> ... [< числоN> ]... ]])

Типы аргументов: целые или вещественные числа.

Тип возвращаемого значения: целое, если все аргументы целые; вещественное, если хотя бы один аргумент является вещественным.

Если количество аргументов равно нулю, то возвращается о (целое). Если количество аргументов равно 1, то возвращается значение, равное значению аргумента.

Примеры:

· (+ 16 30) возвращает 46

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

· (+ -2.0 12.1) возвращает 10.1

· (+ 2 13 1.00) возвращает 16.0

 

 

Функция -

Вычисляет разность чисел.

(- [< число1> [< число2> ... [< числоN> ]... ]])

Типы аргументов: целые или вещественные числа.

Тип возвращаемого значения: целое, если все аргументы целые; вещественное, если хотя бы один аргумент является вещественным.

Если аргументы не заданы, то возвращается о (целое). Если количество аргументов равно 1, то возвращается значение, вычитаемое из 0 (т. е. < число1> с противоположным знаком). Если количество аргументов равно 2 и более, то из первого числа вычитается сумма всех остальных.

Примеры:

· (- 3) возвращает -3

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

· (– 4 2.1 2.3) возвращает -8.4

 

Функция *

Вычисляет произведение чисел.

(* [< число1> [< число2> ... [< числоN> ]... ]]) Типы аргументов: целые или вещественные числа.

Тип возвращаемого значения: целое, если все аргументы целые; вещественное, если хотя бы один аргумент является вещественным.

Если количество аргументов равно нулю, то возвращается о (целое). Если количество аргументов равно 1, то возвращается значение аргумента. Если количество аргументов равно 2 и более, то выполняется перемножение всех аргументов.

Примеры:

· (* 7) возвращает 7

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

· (* 5 l.1 -0.3) возвращает-1.65

При перемножении больших целых чисел следует учитывать, что произведение может выйти за границы допустимых значений и функция выдаст непредсказуемый результат. Так, выражение (* 12345 987654) вернет значение -692313258, что заведомо не может быть правильным, т. к. произведение положительных чисел должно быть положительным. В таких случаях числа следует перемножать в вещественном виде.

 

Функция /

Вычисляет частное чисел.

(/ [< число1> [< число2> ... [< числоN> ]... ]]) Типы аргументов: целые или вещественные числа.

Тип возвращаемого значения: целое, если все аргументы целые; вещественное, если хотя бы один аргумент является вещественным.

Если количество аргументов равно нулю, то возвращается 0 (целое). Если количество аргументов равно 1, то возвращается значение аргумента. Если количество аргументов равно 2 и более, то выполняется деление первого аргумента на произведение всех остальных.

Примеры:

· (/ 81) возвращает 81

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

· (/ 5 1.1 -0.3) возвращает -15.1515

(реальный результат будет получен с максимальной точностью, но на экран обычно выводятся шесть значащих цифр)

· (/ 17 23) возвращает 0

· (/ -17 23) возвращает 0

Замечание

При делении целых чисел результат должен быть того же типа, что и аргументы, т е целым, поэтому он усекается до целого (путем отбрасывания дробной части). Этим объясняется, что выражения (/ 17 23) и (/ -17 23) возвращают значение 0.

Функция 1+

Увеличивает аргумент на 1.

(1+ < число> )

Тип аргумента: целое или вещественное число.

Тип возвращаемого значения: целое, если аргумент целый; вещественное, если

аргумент является вещественным.

Примеры:

· (1+ 2) возвращает 3

· (1+ 5.2) возвращает 6.2

· (1+ -5.2) возвращает-4.2

 

Функция 1-

Уменьшает аргумент на 1.

(1- < число> )

Тип аргумента: целое или вещественное число.

Тин возвращаемого значения: целое, если аргумент целый; вещественное, если аргумент является вещественным.

Примеры:

(1- 11) возвращает 10

(1- 1.17) возвращает 0.17

Функция ~

Вычисляет дополнение числа до -1 (т. е. сумма возвращаемого значения функции и аргумента < целое> равна-1).

(~ < целое> )

Тип аргумента: целое число.

Тип возвращаемого значения: целое.

Примеры:

· (~ 9) возвращает -10

· (~ 0) возвращает -1

Функция abs

Вычисляет абсолютную величину числа.

(abs < число> )

Тип аргумента: целое или вещественное число.

Тип возвращаемого значения: целое, если аргумент целый; вещественное, если аргумент является вещественным.

Примеры:

· (abs 3) возвращает 3

· (abs -1.1) возвращает 1.1

· (abs 0.0) возвращает 0.0

 

Функция rem

Получает остаток от деления аргумента < число1> на < число2>, затем остаток от деления результата на < число3> и т. д.

(rem [< число1> [< число2> ... [< числоN> ]...]])

Типы аргументов: целые или вещественные числа.

Тип возвращаемого значения: целое, если все аргументы целые, и вещественное, если хотя бы один из аргументов вещественный. Знак результата определяется знаком первого аргумента (нулевое значение выводится без знака).

Если аргументы не заданы, то возвращается 0. Если задан только аргумент < чис- ло1>, то возвращается его значение.

Примеры:

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

· (rem 3.3) возвращает 3.3

· (rem 204 2) возвращает 0

· (rem 7 3.2) возвращает 0.6

· (rem 8.9 1.54) возвращает 1.2

· (rem 49 11 3) возвращает 2

· (rem -10 -3) возвращает -1

· (rem 10 -3) возвращает 1

· (rem -10 3) возвращает -1

 

 

Логические функции

В следующих разделах рассматриваются функции логических и условных операций и проверок. Здесь же приводятся функции while и repeat, позволяющие организовывать циклы.

Функция =

Проверяет равенство аргументов (рекомендуется использовать для чисел или строк).

(= < аргумент1> [< аргумент2> ... [< аргументN> ]...])

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значения аргументов совпали, и nil, если не совпали).

Если задан только один аргумент, то возвращается т. Если количество аргументов 2 или больше, то при совпадении значений всех аргументов возвращается т, в противном случае — nil. При сравнении строк т выдается только в случае, когда длины всех строк равны и все строки посимвольно совпадают. При сравнении чисел т выдается также в том случае, когда одни аргументы целые, а другие вещественные, но их значения совпадают.

Примеры:

· (= -17.0 -17 -17.000) возвращает т

· (=1) возвращает т

· (= " 33" ) возвращает т

· (= nil) возвращает т (потому что один аргумент)

· (= 33 " 33" ) возвращает nil

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

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

· (= т т) возвращает т

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

· (= 2 30) возвращает nil

· (= " АР8" " Ар8" " АР8" ) возвращает nil

· (= " 2abc" " 2abc" ) возвращает т.

Функция /=

Проверяет неравенство аргументов (рекомендуется использовать для чисел или строк).

(/= < аргумент1> [< аргумент2> ... [< аргументN> ]...])

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значения каких-то аргументов не совпали, и nil, если совпали). Если задан только один аргумент, то возвращается т.

Примеры:

· (/=5) возвращает т

· (/= -2.0 -2) возвращает nil

· (/= 32 30) возвращает т

· (/= " АР8" " Ар8" " АР8" ) возвращает т

· (/= " АР8" " АР8" " АР8" ) возвращает nil

· (/= " 2 abc" " 2abc" ) возвращает nil

Функция <

Проверяет расположение аргументов по возрастанию, слева направо.

(< < аргумент1> [< аргумент2> ... [< аргументN> ]...])

Типы аргументов: числа (целые, вещественные) или строки.

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

Если задан только один аргумент, то возвращается т.

Примеры:

♦ (< -1) возвращает т

♦ (< -5.81 0) возвращает т

♦ (< 12 12 20) возвращает nil

♦ (< " Х" " Y" " Z" ) возвращает т

♦ (< " 2abc" " 2abc" ) возвращает nil

♦ (< " d" " d5" ) возвращает т

♦ (< " d5" ) " d" ) возвращает nil

 

Функции > < = > = работают анологично.

 

Функция and

Выполняет операцию логического И.

(and [< аргумент1> [< аргумент2> ... [< аргументN> ]...]])

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значения всех аргументов истинны, и nil— в противном случае). К истинным, помимо т, относятся все значения (числовые, строковые и т. д.), кроме nil.

Если аргументы не заданы или задан только один аргумент, то возвращается т. Примеры:

· (and 11) возвращает т

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

· (and т т 4) возвращает т

· (and " х" " у" " z" ) возвращает т

Функция or

Выполняет операцию логического ИЛИ,

(or [< аргумент1> [< аргумент2> ... [< аргументN> ].., ]])

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значение хотя бы одного аргумента истинно, и nil— в противном случае). К истинным, помимо т, относятся все значения (числовые, строковые и т. д.), кроме nil.

Если аргументы не заданы или задан только один аргумент, то возвращается т. Примеры:

· (or 11) возвращает т

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

· (or т т 4) возвращает т

· (or " х" " у" " z" ) возвращает т

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

Функция not

Выполняет операцию логического отрицания.

(not < аргумент> )

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значение аргумента равно nil, и nil — в противном случае).

Примеры:

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

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

· (not ".NET" ) возвращает nil

· (not -64.64) возвращает nil

Функция null

Выполняет операцию проверки на nil.

(null < аргумент> )

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если значение аргумента равно nil, и nil — в противном случае).

Фактически идентична функции not. Традиционно функция null употребляется Для проверки непустоты списков (поскольку пустой список '() идентичен nil) или функций, a not — для аргументов других типов.

Примеры:

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

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

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

· (null ".NET" ) возвращает nil

 

Функция if

Выполняет условную операцию типа if-then-else (если-то-иначе).

(if < условие> < выражение1> [< выражение2> ])

Типы аргументов: любые.

Возвращаемое значение: вычисленное значение аргумента < выражение1>, если значение аргумента < условие> отлично от nil (напомним, что nil в логических операциях используется как " ложь" ); значение аргумента < выражение2>, если значение аргумента < условие> равно nil (причем когда < выражение2> опущено, тогда возвращается nil). Используется как условный оператор.

Примеры:

· (if (> а b) 2 8) возвращает 2, если а> b, и 8 — в других случаях

· (if (= x1 х2) (+ x1 102) (* x1 3.04)) возвращает результат вычисления выражения (+ x1 102), если значения x1 и х2 равны; иначе— результат вычисления выражения (* xl 3.04)

· (if (< a b) " а< b" ) возвращает строку " а< b" или nil (т. к. < выражение2> опущено)

· (if nil " Initialization" ) возвращает nil (т. к. < условие> всегда ложно)

Если функция if используется для выполнения по условию не одного выражения, а нескольких, то эти выражения следует объединить с помощью функции progn (иначе произойдет синтаксическая ошибка, вызванная неправильным количеством аргументов при обращении к функции if).

Функция progn

Объединяет несколько (не мене двух) выражений в одно.

(progn < выражение1> < выражение2> ... [< выражениеЫ> ])

 

Типы аргументов: любые.

Возвращаемое значение — значение последнего из объединенных выражений.

 

Рассмотрим использование функции progn на таком примере. Пусть при истинности условия (> а b) нужно выполнить выражения (setq с -1), (setq d (-c a b)) и (* d b), а при ложности условия — рассчитать выражения (setq с 2), (setq d (* а b)) и (* d с). Программный код приведен в листинге ниже.

Листинг. Пример совместного использования функций if и progn.

(if (> a b)

(progn

(setq с -1)

(setq d (-c a b))

(* d b)

); конец progn

(progn

(setq с 2)

(setq d (* a b))

(* d c)

); конец progn

); конец if

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

 

Функция cond

Условная операция (типа case в языках программирования высокого уровня) с любым количеством условий.

(cond [ (< условие1> [< выражениеN> ... ])

[(< условие2> [< выражение21> ... ])]...])

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

Возвращаемое значение: последнее вычисленное выражение того списка, условие в котором оказалось истинным (если таких списков несколько, то выполняются только выражения первого списка с истинным условием). Если вычисляемое выражение отсутствует (не задано в списке с истинным условием), то возвращается результат вычисления аргумента < условие>. Если аргументы функции cond не заданы или если условия во всех списках оказались ложными, то возвращается nil.

Примеры:

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

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

· (cond (T 55)) возвращает 55

· (cond ((= 5 6) 55) ((= 7 19) 97)) возвращает nil

· (cond ((= 2 2) 100) (т 500000)) возвращает 100

· (cond ((not nil) 534)) возвращает 534

· (cond (80)) возвращает 80

Впрочем, использование функции cond с неполным количеством аргументов не имеет особого смысла.

Рассмотрим задачу: переменной mycolor нужно присвоить текстовое значение с наименованием одного из основных цветов AutoCAD (" красный", " желтый", " зеленый", " голубой", " синий" ) в зависимости от текущего значения переменной сс, которая принимает значения 1, 2, 3, 4, 5. Если значение переменной сс оказалось отличным от перечисленных, то переменной mycolor нужно присвоить " " (пустая строка).

 

(setq mycolor

(cond

((= сс 1) " красный" )

((= сс 2) " желтый" )

((= сс 3) " зеленый" )

((= сс 4) " голубой" )

((= сс 5) " синий" )

(Т " " )

); конец cond

); конец setq

 

Функция setq присваивает переменной mycolor результат вычисления функции cond. Значение, возвращаемое функцией cond, вычисляется по следующей схеме. Сначала рассматривается список, заданный в качестве первого аргумента — ((= сс 1) " красный" ) — и проверяется условие, являющееся первым элементом этого списка. Если оказалось, что значение сс равно 1 и, значит, первое условие возвращает " истину", то дальнейшее рассмотрение аргументов функции cond не выполняется, а в качестве возвращаемого значения принимается " красный". Если первое условие не вычислилось как " истина", то проверяется второе условие и т. д. В качестве последнего, шестого, условия стоит т (т. е. " истина" при любых значениях), поэтому если значение переменной сс не совпало с 1, 2, 3, 4, 5, то в качестве возвращаемого значения функции cond будет принято " " (пустая строка).

 

Функция zerop

Проверка числа на нуль.

(zerop < число> )

Тип аргумента: целое или вещественное число.

Возвращаемое значение: т, если < число> равно нулю, и nil — в противном случае.

Примеры:

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

· (zerop 0.0) возвращает т

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

 

 

Функция numberp

Проверка типа аргумента на числовой,

(numberp < аргумент> )

Тип аргумента: любой.

Возвращаемое значение: т, если < аргумент> является вещественным или целым числом, и nil — в противном случае.

Примеры:

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

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

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

· (numberp -220.0) возвращает т

· (numberp " 95" ) возвращает nil

· (numberp '(14.39)) возвращает nil (список не относится к числам)

 

Функция listp

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

(listp < аргумент> )

Тип аргумента: любой.

Возвращаемое значение: т, если < аргумент> является списком, точечной парой, точечным списком или nil (т. к. пустой список ‘() вырождается в nil), и nil — в противном случае.

Примеры:

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

· (listp 70.2e+23) возвращает nil

· (listp " as" ) возвращает nil

· (listp ' (-41.44)) возвращает т

· (listp '(8. " Upper" )) возвращает т

· (listp '(3 5 6. 4)) возвращает т

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

 

 

Функция equal

Проверяет равенство двух объектов (для чисел и списков из числовых величин сравнение производится в пределах допуска).

(equal < аргумент1> < аргумент2> [< допуск> ])

Типы аргументов: любые.

Тип возвращаемого значения: логическое (т, если абсолютная величина разности аргументов не превосходит значения аргумента < допуск>, и nil, если не совпали; когда < допуск> не задан, то его значение считается равным нулю). Для аргументов, не являющихся числами или списками из чисел, < допуск> не используется.

Примеры:

· (equal -17.0 -17) возвращает т

· (equal 6.000 6.005 0.005) возвращает т

· (equal " cow" " cow" ) возвращает т

· (equal '(3.00 54.2 0.99) '(3 54.2 1.0) 0.01) возвращает nil (на границе допуска функция может давать неверный результат)

· (equal '(3.00 54.2 0.99) '(3 54.2 1.0) 0.011) возвращает т

 

 

Функция while

Выполняет операцию цикла по многократно проверяемому условию.

(while < условие> [< выражение1> [< выражение2> ...

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

Типы аргументов: любые.

Функция while на каждом шаге цикла вычисляет значение аргумента < условие> и, если это значение " истинно" (т. е. не nil), выполняет (вычисляет) следующие за Условием выражения. Функция прекратит свою работу, когда на некотором шаге аргумент < условие> получит значение nil. Аргумент < условие> должен быть таким, чтобы на каком-то шаге он получил бы значение nil, иначе цикл, организуемый с помощью функции while, станет бесконечным (программа " зациклится" ).

Возвращаемое значение: значение аргумента < выражениеы> на том шаге, когда последнее вычисление аргумента < условие> выдало значение, отличное от nil. Если уже на первом шаге < условие> имеет значение nil, то функция while ничего не выполняет и возвращает nil.

Рассмотрим следующий пример. Пусть надо вычислить значение n! (факториал числа n), т. е. произведение целых чисел от 1 до n. В данном подразделе восклицательный знак используется как знак функции факториала.

;;; (setq n 10); Задайте n

(setq i 1 factorial 1)

(while (< i n)

(setq i (1+ i))

(setq factorial (* factorial i))

); конец while

Функция repeat

Выполняет операцию цикла с фиксированным количеством повторений.

(repeat < количество> [< выражение1> ...])

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

Возвращаемое значение: значение последнего вычисленного выражения. Если < количество> имеет значение 0 или отрицательно или после аргумента < количество> не заданы выражения, то функция repeat возвращает nil

 

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

 

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

 

 

Лекция 13. Функции преобразования данных и обработки строк

 

Функция type

Определяет тип символа.

(type < символ> )

Тип аргумента: символ (имя функции или переменной).

Если < символ> не является именем функции или переменной с присвоенным значением, то возвращается nil.

Другие варианты возвращаемого значения:

· ENAME — примитив AutoCAD;

· FILE — указатель (дескриптор) файла;

· INT — целое число;

· LIST — список, точечная пара или точечный список;

· PAGETB — таблица диспетчера страничной организации памяти;

· PICKSET — набор;

· REAL — вещественное число;

· SAFEARRAY — безопасный массив;

· STR — строка;

· SUBR— встроенная функция или функция, загруженная из VLX-файла (функция, определенная в ARX-приложении, имеет дополнительный признак EXRXSUBR);

· SYM — символ;

· VARIANT — вариант;

· USUBR— пользовательская функция, загруженная из LSP-файла;

· VL-CATCH-ALL-APPLY-ERROR— объект, создаваемый функцией vi-catch-all- apply;

· VLA-OBJECT — объект Visual LISP, использующий технологию ActiveX (указатель на структуру или экземпляр класса);

· VLR-OBJECT — реактор.

Некоторые из перечисленных вариантов возвращаемого значения доступны только при использовании других средств разработки приложений.

Примеры:

· (type 73) возвращает INT

· (type 1-) возвращает SUBR

· (type " Рлс" ) возвращает STR

· (type '(1 81 264)) возвращает LIST

 

Функция float

Преобразует целое число в вещественное.

(float < число> )

Тип аргумента: целое или вещественное число

Если < число> — целое, то возвращается результат его преобразования в вещественное. Если < число> — вещественное, то оно же и возвращается в качестве значения функции float.

Примеры:

· (float 4) возвращает 4.0

· (float -69) возвращает -69.0

· (float 4.3) возвращает 4.3

 

Функция itoa

Преобразует целое число в строку.

(itoa < целое> )

Тип аргумента: целое число.

Возвращается строка, являющаяся результатом преобразования аргумента < целое> в строковое представление.

Примеры:

· (itoa 30) возвращает " 30"

· (itoa -572) возвращает " -572"

· (itoa 0) возвращает " 0"

 

Функция rtos

Преобразует вещественное число в строку.

(rtos < число> [< режим> [< точность> ]])

Аргументы: < число> — вещественное или целое число; < режим> — целое (номер режима представления вещественных чисел); < точность> — количество десятичных знаков в представлении вещественных чисел. Аргументы < режим> и < точность> имеют тот же смысл и принимают те же значения, что и системные переменные LUNITS и LUPREC. Если аргументы < режим> и < точность> опущены, то в качестве их значений принимаются текущие значения LUNITS и LUPREC. На форму возвращаемого значения может оказывать влияние системная переменная UN1TMODE.

Допустимые значения аргумента < режим>:

· 1 — научный;

· 2 – десятичным;

· 3 – инженерный (футы и дюймы);

· 4 — архитектурный (футы и дюймы);

· 5 — дробный.

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

Примеры:

· (rtos 10.9453 1 3) возвращает " 1.095Е+01"

· (rtos 10.9453 2 3) возвращает " 10.945"

· (rtos 10.9453 3 3) возвращает " 0'-10.945\" " (обратная косая черта предшествует двойной кавычке, как символу дюйма, ' чтобы не путать ее с двойной кавычкой, являющейся признаком конца строки)

· (rtos 10.9453 4 3) возвращает " 0'-11\" " (здесь тоже для вывода внутренней двойной кавычки использована обратная черта)

· (rtos 10.9453 2 0) возвращает " 11"


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-03; Просмотров: 1204; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.357 с.)
Главная | Случайная страница | Обратная связь