LISP1 (663340), страница 3
Текст из файла (страница 3)
Например:
(* 2 3) вводит 6
(* 2 3 4.0) вводит 8.000000
(* 3 -4.5) вводит -13.500000
4.4 (/ ...)
Эта функция делит первое на второе и вводит частное. Если задано более двух , первое делится на произведение второго и всех последующих чисел и вводится конечное частное.
Примеры:
(/100 2) вводит 50
(/100 2.0) вводит 50.000000
(/100 20 2.0) вводит 2.500000
(/100.0 20 2) вводит 2.500000
(/100 20 2) вводит 2
(/135 360) вводит 0
(/135 360.0) вводит 0.375000
4.5 (= ...)
Это относительная функция "равно чему-либо". Она вводит T, если все определенные равны в числовом отношении, во всех других случаях вводится ноль. Эта функция также действительна для строчек.
Примеры:
(=4 4.0) вводит T
(=20 388) вводит nil
(=2.4 2.4 2.4) вводит T
(=499 499 500) вводит nil
(="me" "me") вводит T
(="me" "you") вводит nil
4.6 (/= )
Это относительная функция "не равно чему-либо". Она вводит T, если не равно , в противном случае вводится nil. Если задано более двух параметров, функция не определяется. Например:
(/=10 20) вводит T
(/=5.43 5.43) вводит nil
(/=5.43 5.44) вводит T
4.7 (< ...)
Это относительная функция "менее, чем". Она вводит T, если первое меньше второго, и nil если наоборот. Если задано более двух , T вводится в том случае, если каждые из чисел меньше, чем справа от него. Например:
(< 10 20) вводит T
(< 4 4) вводит nil
(< 357 33.2) вводит nil
(< 2 3 88) вводит T
(< 2 3 4 4) вводит nil
4.8 (<= ...)
Это относительная функция "менее или равно". Она вводит T, если первое менее или равно второму и nil в других случаях. Если задано более двух , T вводится в том случае, если каждое число меньше или равно , стоящему справа от него. Например:
(<= 10 20) вводит T
(<= 4 4) вводит T
(<= 357 33.2) вводит nil
(<= 2 9 9) вводит T
(<= 2 9 4 5) вводит nil
4.9 (> ...)
Это относительная функция "больше, чем" . Она вводит T, если первое больше, чем второе и nil, если наоборот. Если задано больше двух , T вводится при условии, что каждое число больше стоящего справа. Например:
(> 120 17) вводит T
(> 57 57) вводит nil
(> 3.5 1792) вводит nil
(> 77 4 2) вводит T
(> 77 4 4) вводит nil
4.10 (>= ...)
Это относительная функция "больше или равно". Она вводит T, если первое больше или равно второму, и nil в противном случае. Если задано больше двух , T вводится при условии, что каждое число больше или равно справа от него. Например:
(>= 120 17) вводит T
(>= 57 57) вводит T
(>= 3.5 1792) вводит nil
(>= 77 4 4) вводит T
(>= 77 4 9) вводит nil
-
(- )
Эта функция вводит подразрядный НЕТ (NOT) (чье-то дополнение) . должно быть целым. Например:
(-3) вводит -4
(-100) вводит -101
(- -4) вводит 3
4.12 (1+ )
Эта функция вводит , увеличенное на единицу (приращенное). может быть действительным или целым. Например:
(1+ 5) вводит 6
(1+ -17.5) вводит -16.500000
4.13 (1- )
Эта функция вводит , уменьшенное на единицу (декрементированное). может быть действительным или целым. Например:
(1- 5) вводит 4
(1- -17.5) вводит -18.500000
4.14 (abs )
Эта функция вводит абсолютное значение . может быть действительным или целым. Например:
(abs 100) вводит 100
(abs -100) вводит 100
(abs -99.25) вводит 99.250000
4.15 (and ...)
Эта функция вводит логическое И (AND) списка выражений. Она вводит ноль, если любое из выражений вычисляется к нулю, в противном случае она вводит T. Например, заданы следующие назначения:
(setq a 103)
(setq b nil)
(setq c "string")
тогда:
(and 1.4 a c) вводит T
(and 1.4 a b c) вводит nil
4.16 (angle )
Эта функция вводит угол (в радианах) между 2D точками и , когда 2D точка - перечень двух действительных чисел. Например:
(angle '(1.0 1.0) '(1.0 4.0)) вводит 1.570796
(angle '(5.0 1.33) '(2.4 1.33)) вводит 3.141593
4.17 (angtos [ []])
Эта функция берет (действительный, в радианах) и вводит его отредактирован-ным в виде строки. Параметр / - целое число; следующим образом он диктует тип выполняемого редактирования:
Режим ANGTOS Формат Редактирования
------------ ---------------------
0 Градусы
1 Градусы/минуты/секунды
2 Грады
3 Радианы
4 Топографические единицы
Параметр / - целое число, которое выбирает желаемое количество десятичных знаков точности. и соответствуют системе переменых AUNITS и AUPREC АвтоКАДа. Если вы пропускаете параметры, будут применяться текущие установки AUNITS и AUPREC.
Например,заданы следующие назначения:
(setq pt1 '(5.0 1.33))
(setq pt2 '(2.4 1.33))
(setq a (angle pt1 pt2))
тогда:
(angtos a 0 0) вводит "180"
(angtos a 0 4) вводит "180.0000"
(angtos a 1 4) вводит "180d0'0"
(angtos a 3 4) вводит "3.1416r"
(angtos a 4 2) вводит "W"
4.18 (append ...)
Эта функция берет любое количество элементов (/) и соединяет их вместе в один перечень. Например
(append '(a b) '(c d)) введет (A B C D)
(append '((a)(b)) '((c)(d)) введет ((A)(B)(C)(D))
APPEND требует,чтобы ее параметры были в виде списков.
4.19 (apply )
Выполняет функцию, определенную / с параметрами, заданными в /. Например:
(apply ' + '(1 2 3)) вводит 6
(apply 'stract' ("a" "b" "c")) вводит "abc"
APPLY работает как со встроенными (subrs), так и с определенными пользователем (эти создаются как с помощью DEFUN, так и LAMBDA) функциями.
4.20 (ascii )
Эта функция вводит переход первого символа в ее знаковый код ASCII (целые числа). Это то же, что и функция ASC в языке БЕЙСИК. Например:
(ascii "A") вводит 65
(ascii "a") вводит 97
(ascii "BIG") вводит 66
4.21 (assoc )
Эта функция ищет список ассоциаций для единицы () как ключевого элемента и вводит содержимое . Если не найден как ключ в , ASSOC вводит ноль. Например, предположим, что список "al" определен как:
((name box) (width 3) (size 4.7263) (depth 5))
тогда:
(assoc 'size al) вводит (SIZE 4.7263)
(assoc 'weight al) вводит nil
Список ассоциаций часто используется для запоминания данных, которые могут выбираться как "ключ". Это похоже на матрицы и структуры в других языках программирования. Функция SUBST, описанная далее в этой главе, обеспечивает удобные способы отмены значений, ассоциируемые с одним ключем в перечне ассоциаций.
4.22 (atan [])
Если не задается, ATAN вводит арктангенс в радианах. может быть отрицательным, диапазон вводимых углов от -pt до +pt радиан. Например:
(atan 0.5) вводит 0.463647
(atan 1.0) вводит 0.785398
(atan -1.0) вводит -0.785398
(angtos (atan -1.0) 0 4) вводит "-45.0000"
Если заданы оба параметра ( и ), вводится арктангенс / в радианах. Если - ноль, вводится угол в плюс или минус 1.570796 радиан (90 или -90 градусов) в зависимости от знака . Например:
(atan 2.0 3.0) вводит 0.588002
(angtos (atan 2.0 3.0) 0 4) вводит "33.6901"
(atan 2.0 -3.0) вводит 2.553590
(angtos (atan 2.0 -3.0) 0 4) вводит "146.3099"
(atan -2.0 3.0) вводит -0.588002
(atan -2.0 -3.0) вводит -2.553590
(atan 1.0 0.0) вводит 1.570796
(angtos (atan 1.0 0.0) 0 4) вводит "90.0000
(atan -0.5 0.0) вводит -1.570796
(angtos (atan -0.5 0.0) 0 2) вводит "-90.00"
4.23 (atof )
Эта функция вводит преобразование строчки в действительные числа. Например:
(atof "97.1") вводит 97.100000
(atof "3") вводит 3.000000
4.24 (atoi )
Эта функция вводит преобразование строки в целое число.
(atoi "97") вводит 97
(atoi "3") вводит 3
(atoi "3.9) вводит 3
4.25 (atom )
Эта функция вводит ноль, если - список, в противном случае вводится T. Данные, поступающие не в виде строчек, проходят как atom. Например, даны выражения:
(setq a '(x y z))
(setq b 'a)
тогда:
(atom 'a) вводит T
(atom a) вводит nil
(atom 'b) вводит T
(atom b) вводит T
(atom '(a b c)) вводит nil
Некоторые варианты ЛИСПа различаются в своих интерпретациях ATOMа, так что поупражняйтесь в применении кода преобразования.
4.26 (Boole ...)
Это основная подразрядная булевая функция. - целое число от 0 до 15, представляющая одну из 16 возможных булевых функций на двух переменных. Последовательные параметры в виде целых чисел подразрядно (логически) скомбинированы, основываясь на этих функциях и истинностной таблице:
Int1 Int2 Func bit
---------------------
0 0 8
0 1 4
1 0 2
1 1 1
Каждый бит имеет пару соответствующего бита , выбирая один горизонтальный ряд истинностной таблицы. Бит результата или ноль, или 1, в зависимости от установки бита , соответствующего этому ряду истиностной таблицы. Если соответствующий бит задан в , бит результата 1, в противном случае бит результата - 0.
Некоторые значения для эквивалентны стандартным булевым операциям AND, OR, XOR и NOT. Они представлены ниже:
Функция Операция Бит результата 1,если...
-------------------------------------------------------
1 AND оба входных бита - 1
6 XOR только один из двух входных битов - 1
7 OR любой или оба из входных битов
8 NOT оба входных бита - 0 (чье-то дополнение)
Например:
(Boole 1 12 5)
определяет логическое AND для значений 12 и 5. Результат 4. Аналогично:
(Boole 6 6 5)
определяет логическое XOR для значений 6 и 5,в результате - 3.
Вы можете применять другие значения для выполнения других булевых операций, для которых эти имена не являются стандартными. Например, если - 4 , биты результата заданы, если заданы соответствующие биты в , но не в . Таким образом:
(Boole 4 3 14)
введет 12.
4.27 (boundp )
Эта функция вводит T, если имеет значение, близкое к нему (не взирая на контекст). Если же нет значения, близкого к (или если оно близко к нулю), вводится ноль. Например, заданы назначения:
(setq a 2)
(setq b nil)
тогда:
(boundp 'a) вводит T
(doundp 'b) вводит nil
4.28 caar, cadr, cddr, cadar, etc.
АвтоЛИСП обеспечивает связь CAR и CDR до четырех уровней вглубь. Например, задано назначение:
(setq x '((a b) c d))
тогда:
(caar x ) эквивалентно (car (car x)) вводит A
(cdar x) эквивалентно (cdr (car x)) вводит (B)
(cadar x) эквивалентно (car (cdr (car x))) вводит B
(cadr x) эквивалентно (car (cdr x)) вводит С
(cddr x) эквивалентно (сdr (сdr x)) вводит (D)
(caddr x) эквивалентно (car (cdr (cdr x))) вводит D
В АвтоЛИСПе CADR частично применяется для получения координаты Y для точек 2D и 3D ( второй элемент в списке из двух или трех действительных чисел). Аналогично, CADDR может применяться для определения координаты Z для точки 3D. Например:
(setq pt2 '(5.2 1.0 (2D точка)
(setq pt3 '(5.2 1.0 3.0) (3D точка)
тогда:
(car pt2) вводит 5.200000
(cadr pt2) вводит 1.000000
(caddr pt2) вводит nil
(car pt3) вводит 5.200000
(cadr pt3) вводит 1.000000
(caddr pt3) вводит 3.000000
4.29 (car )
Эта функция вводит первый элемент . Если пустой, вводится ноль. Например:
(car '(a b c)) вводит A
(car '((a b) c)) вводит (A B)
(car '()) вводит nil
4.30 (cdr )
Эта функция вводит весь , кроме его первого элемента. Если пустой, вводится ноль. Например:
(cdr '(a b c)) вводит (B C)
(cdr '((a b) c)) вводит (C)
(cdr '()) вводит nil
Когда параметры - разделенные точкой пары (см. ниже CONS), CDR вводит второй элемент без включения его в список. Например:
(cdr '(a . b) вводит B
(cdr '(1 . "Text") вводит "Text"
4.31 (chr )
Эта функция вводит переход целых чисел, представленных в знаковом коде ASCII, в однознаковую строку (аналогично функции CHRS в языке БЕЙСИК). Например:
(chr 65) вводит "A"
(chr 66) вводит "B"
(chr 97) вводит "a"
4.32 (close )
Эта функция закрывает файл и вводит ноль. - дескриптор файла (оприсатель), полученный из функции OPEN. После CLOSE дескриптор файла не изменяется, но становится недействительным. Например, представьте, что Х - действительный открытый дескриптор файла,
(close x )