Студопедия

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

КАТЕГОРИИ:

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






Лекция 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>] ... ]]) Типы аргументов: целые или вещественные числа.

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

Вели количество аргументов равно нулю, то возвращается о (целое). Если количество аргументов равно 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>]...]])

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

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

Если аргументы не заданы, то возвращается о. Если задан только аргумент <чис- ло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

 


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