<Назад

Далее

3. ОСНОВЫ ГРАФИЧЕСКОГО ЯЗЫКА АВТОЛИСП .Часть 2.


  • План.
  • 1.Функции для работы с числами………………………………..
  • 2.Функции проверки условий ……………………………………..
  • 3.Функции обработки текстовых (строковых) переменных………………………………………………………………………….
  • 4.Функции изменения типа данных……………………………..

 

 

3.3.4. Функции для работы с числами

Для вычислений и действий над целыми и действительными числами в Автолиспе предусмотрено значительное количество функций, которые сведены в табл. 6.

Таблица 6

Описание функций, применяемых в Автокаде для работы с числами

Функция

Действие

Пример

Выражение

Результат

1

2

3

4

+

Сложение

(+ 2 3 4.0)

(+ 5)

9.0

5

-

Вычитание

(- 10 2 4.0)

(- 9)

4.0

9

*

Умножение

(* 2 3 2)

(* 2.0 )

12

2.0

/

Деление

(/ 9 2 4)

(/ 9 2 4.0)

1

1.125

Окончание табл.6

1

2

3

4

~

Логическая функция НЕ

(~ 10)

(~ -10)

- 11

9

1+

Инкрементация

(1+ 6)

(1+ -9)

7

-8

1-

Декрементация

•  -9)

(1- 6)

-10

5

ABS

Определение модуля числа

(ABS 25.5)

(ABS -25.5)

25.5

25.5

ATAN

Арктангенс

(ATAN 1)

0.785398

COS

Косинус

(COS pi)

-1.0

EVAL

Вычисляет значение выражения

(EVAL 4.0)

(EVAL (* 4.0 5))

4.0

20.0

EXP

Натуральная экспонента числа

(EXP 0)

(EXP 1)

1.0

2.71828

EXPT

Возведение в степень

(EXPT 3 2.0)

9.0

GCD

Наибольший общий делитель двух чисел

(GCD 12 18)

(GCD 12 17)

6

1

FIX

Ближайшее целое без дробной части

(FIX 4.7)

(FIX –5.5)

4

-5

LOG

Натуральный логарифм

(LOG 2.7)

0.993252

LOGAND

Логическая функция И целых чисел

(LOGAND 1 2 3)

(LOGAND 4 5 7)

0

4

LOGIOR

Логическая функция ИЛИ целых чисел

(LOGIOR 1 2 4)

(LOGIOR 9 3)

7

11

LSH

Логическая функция сдвига на целое число разрядов

(LSH 2 1)

(LSH 2 -1)

4

1

SIN

Синус

(SIN (/ pi 2))

(SIN 1)

1.0

0.841471

SQRT

Квадратный корень

(SQRT 36)

6.0

REM

Остаток от деления

(REM 11 2)

1

MAX

Максимальное значение из списка

(MAX 4 5 1)

(MAX -4 -5 -1)

5

-1

MIN

Минимальное значение из списка

(MIN 4 5 1)

(MIN -4 -5 -1)

1

-5

Функции +, -, *, /, LOGAND, LOGIOR могут иметь больше двух аргументов. Для функции вычитания первый аргумент обозначает уменьшаемое, остальные вычитаемые, у функции деления / первый аргумент - делимое, остальные – делитель. Функции возведения в степень EXPT и логическая функция сдвига LSH должны иметь два аргумента. Функции ABS, SIN, COS, ATAN, SQRT, EXP, LOG имеют по одному аргументу.

Тип результата функции зависит от функции и типов аргументов. Для SIN, COS, ATAN, SQRT, EXP, LOG результат всегда является действительным числом.

Арифметические функции возвращают разные по типу значения в зависимости от типа аргументов функции. Например, если все аргументы целые числа (integer), то результат будет также целым. Однако, если один или все аргументы являются действительными числами, функция возвращает действительное (real) число.

Например:

(/ 14 4) ® 3; (/ 14 4.) ® 3.5.

Несмотря на то, что Автолисп для внутренних вычислений использует 32–разрядные значения, обмен значениями с Автокадом выполняется 16-разрядными числами. Поэтому предел целых чисел составляет +32767 и – 32768. В последних версиях Автокада пределы целых чисел установлены от -2147483647 до - +2147483647. Если необходимо использовать числа за указанными пределами, то целые числа можно превратить в 32-разрядные действительные с помощью функции FLOAT.

Например:

(SETQ D(FLOAT (* 4 25000))) ® 100000.0

Функция (BOOLE <код булевой функции> <целое число1> <целое число2> ...) является универсальной булевой функцией, выполняет побитно заданную функцию аргументом <код булевой функции> над аргументами <целое число1 целое число2…> . Функция BOOLE возвращает результат в виде десятичного целого числа.

Аргумент <булева функция> принимает значения от 0 до 15, что соответствует одной из 16 возможных булевых функций. Последующие аргументы логически связаны с функцией и таблицей истинности булевых функций двух переменных (табл. 7). В табл. 7 X1, X2 являются двоичными значениями аргументов <целое число1>, <целое число2>; Y i – двоичный результат i -й функции.

Таблица 7

Логические функции двух переменных X1, X2

X, Y

Двоичные числа

Десятичное значение

Описание функции

Чтение

1

2

3

4

5

X1

0 0 1 1

3

Первый аргумент функции

Аргумент X1

X2

0 1 0 1

5

Второй аргумент функции

Аргумент X2

Y0

0 0 0 0

0

Константа 0 (тождественный нуль, всегда ложно)

Любое 0

Y1

0 0 0 1

1

Конъюнкция (совпадение, произведение, пересечение, логическое «И»):

X1*X2; X1&X2; X1 C X2

X1 и X2

Окончание табл.7

1

2

3

4

5

Y2

0 0 1 0

2

Отрицание импликации:

X1 ¬ X2; X1\X2

X1 , но не X2

Y3

0 0 1 1

3

Повторение (утверждение, доминация) первого аргумента X1

Как X1

Y4

0 1 0 0

4

Отрицание обратной импликации (обратное антисовпадение):

X2 ¬ X1; X2\X1

Не X1 , но X2

Y5

01 0 1

5

Повторение (утверждение, доминация) второго аргумента X2

Как X2

Y6

01 1 0

6

Сумма по модулю 2 (неравнозначность, антиэквивалентность) X1+X2; X1 X2

X1 не как X2

(или X1 или X2 )

Y7

0 1 1 1

7

Дизъюнкция (разделение, логическая сумма, логическое «ИЛИ»):

X1+X2

X1 или X2

( X1 или хотя бы X2 )

Y8

1 0 0 0

-8=( 8-16)

Стрелка Пирса (функция Вебба, отрицание дизъюнкции, логическое «НЕ-ИЛИ»):

X1 ? X2; X1 O X2

Ни X1 , ни X2

Y9

1 0 0 1

-7=( 9-16)

Эквиваленция (равнозначность, эквивалентность, взаимозависимость):

X1 « X2; X1~X2; X1 ? X2

X1 как X2

Y10

1 0 1 0

-6=(10-16)

Отрицание (инверсия) второго аргумента:

~X2; ¬ X2

Не X2

Y11

1 0 1 1

-5=(11-16)

Обратная импликация:

X2>X1; X1<X2

Если X2 , то X1

( X1 или не X2 )

Y12

1 1 0 0

-4=(12-16)

Отрицание (инверсия) первого аргумента:

~X1; ¬ X1

Не X1

Y13

1 1 0 1

-3=(13-16)

Импликация (следование, селекция):

X1 > X2; X1>X2

Если X1 , то X2

(не X1 или X2 )

Y14

1 1 1 0

-2=(14-16)

Штрих Шеффера (отрицание конъюнкции, несовместимость, логическое «НЕ-И»

X1/X2

Не X1 или не X2

Y15

1 1 1 1

-1

Константа 1

Любое 1

Например:

(BOOLE 0 3 3) ® 0; (BOOLE 1 3 1) ® 1; (BOOLE 1 12 5) ® 4

(BOOLE 6 6 5) ® 3; (BOOLE 4 3 14) ® 12; (BOOLE 15 5 5) ® -1.

3.3.5. Функции проверки условий

Функции ATOM, BOUNDP, EQ, EQUAL, LISTP, MINUSP, NULL, NUMBERP, ZEROP служат для проверки различных условий.

Функция (ATOM <элемент>), если аргумент <элемент> является атомом, возвращает Т, иначе – NIL.

Например, если

тогда функция

возвращает

(SETQ A '(X Y Z))

(ATOM 'A)

T

 

(ATOM A)

NIL

Функция (BOUNDP <атом>), если аргумент <атом> не NIL, возвращает Т, иначе - NIL.

Например, если

тогда функция

возвращает

(SETQ A 5 B NIL)

(BOUNDP 'A)

T

 

(BOUNDP 'B)

NIL

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

Например, если

тогда функция

возвращает

(SETQ F1 '(A B C) F2 '(A B C) F3 F2)

(EQ F1 F3)

NIL

 

(EQ F3 F2)

T

 

(EQ F1 F2)

NIL

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

Функция (EQUAL <выражение1> <выражение2> [<допуск>]), если оба выражения равны между собой возвращает Т, иначе NIL. Аргумент [<допуск>] задает точность сравнения.

Например, если

тогда функция

возвращает

(SETQ F1 '(A B))

(EQUAL F1 F3)

T

(SETQ F2 '(A B))

(EQUAL F3 F2)

T

(SETQ F3 F2)

(EQUAL A B)

NIL

(SETQ A 1.15) (SETQ B 1.16)

(EQUAL A B 0.01)

T

Функция (LISTP <элемент>), если аргумент <элемент> является списком, возвращает Т, иначе – NIL

Например :

(LISTP '(A B C)) ® T; (LISTP 6.5) ® NIL;

(LISTP 'ACAD) ® NIL; (LISTP NIL) ® T.

Так как NIL является одновременно атомом и списком, то функция LISTP возвращает T, когда ее аргумент является NIL.

Функция (NULL <атом>), если аргумент <атом> имеет значение NIL, возвращает Т, иначе - NIL.

Например, если

тогда функция

возвращает

(SETQ A 2 B “ACAD” C NIL)

(NULL A)

NIL

 

(NULL B)

NIL

 

(NULL C)

T

 

(NULL '())

T

Функция (NUMBERP < атом >), если аргумент < атом > является числом, возвращает Т, иначе - NIL.

Например, если

тогда функция

возвращает

(SETQ A 3 B 'A)

(NUMBERP A)

T

 

(NUMBERP B)

NIL

 

(NUMBERP "HOWDY")

NIL

 

(NUMBERP (EVAL B))

T

Функция (MINUSP <число>), если аргумент является отрицательным числом, возвращает T, иначе – NIL.

Например :

(MINUSP -1) ® T; (MINUSP -4.25) ® T; (MINUSP 830.) ® NIL.

Функция (ZEROP <число>) возвращает Т, если аргумент равен нулю, иначе – NIL. Если аргумент не является числом, выводится сообщение о неправильном типе аргумента.

Например :

(ZEROP 0) ® T; (ZEROP 0.0) ® T; (ZEROP 0.1) ® NIL

3.3.6. Функции обработки текстовых (строковых) переменных

В Автолиспе имеется возможность выполнять ряд процедур над текстовыми (строковыми) переменными: изменять регистры символов; определять число символов в строке; выполнять слияние строк; извлекать цепочку символов из строки.

Обработка текста производится функциями STRCASE, STRLEN, STRCAT, SUBSTR.

Функция (STRCASE <строка> [регистр]) преобразовывает символы строки в символы верхнего или нижнего регистра. Аргумент [регистр] может иметь любое не NIL значение, если он отсутствует, тогда аргумент <строка> преобразуется в символы верхнего регистра.

Например:

(STRCASE "приборостроение") ® "ПРИБОРОСТРОЕНИЕ";

(STRCASE "ПРИБОРОСТРОЕНИЕ" T) ® "приборостроение".

Функция (STRLEN <строка>) возвращает целое число, равное количеству символов в строке.

Функция (STRCAT <строка1> <строка2>) производит соединение строк аргументов.

Функция (SUBSTR <строка> <начало> [<длина>]) возвращает подстроку, выделенную из <строки>, начиная с символа с номером <начало>, длиной равной [<длина>]. Если параметр [<длина>] не указан, тогда подстрока выделяется до конца строки.

Например, если

тогда функция

возвращает

(SETQ A “Auto” B “LISP”),

(STRLEN A)

4

 

(STRCAT A B)

“AutoLISP”

 

(SUBSTR “AutoLISP” 5)

”LISP”

 

(SUBSTR (STRCAT A B)5 2)

”LI”

3.3.7. Функции изменения типа данных

Для преобразования типов данных в Автолиспе используются следующие встроенные функции: ANGTOF, ANGTOS, ASCII, ATOF, ATOI, CHR, CVUNIT, DISTOF, FIX, FLOAT, ITOA, RTOS, TRANS.

Функция (ANGTOF <угол> [<представление>]) преобразует <угол>, заданный в текстовом виде, в радианы. Аргумент <представление> указывает формат аргумента <угол>: 0 - градусы; 1 - градусы/минуты/секунды; 2-грады; 3-радианы; 4 - топографические единицы (“N”, “W”, “S”, “O”).

Например, если

тогда функция

возвращает

(SETQ ANG "180")

(ANGTOF ANG 0)

3.14159

(SETQ ANG"180d0'0\"")

(ANGTOF ANG 1)

3.14159

(SETQ ANG "200.000g")

(ANGTOF ANG 2)

3.14159

(SETQ ANG "3.14159r")

(ANGTOF ANG 3 )

3.14159

(SETQ ANG “W”)

(ANGTOF ANG 4)

3.14159

Функция (ANGTOS <угол> [<представление> <точность>]) преобразует <угол>, заданный в радианах, в текстовый тип. Аргумент <представление> указывает формат: 0 - градусы; 1 - градусы/минуты/секунды; 2-грады; 3-радианы; 4 - топографические единицы (“N”, “W”, “S”, “O”). Аргумент <точность> (целое число) задает число знаков после запятой. Если аргументы не указаны, то используются значения переменных AUNITS и AUPREG. Если аргумент <угол> отрицательный, то он преобразуется в положительный угол в пределах 0-2 p .

Например, если

тогда функция

возвращает

(SETQ ANG(/ PI 3))

(ANGTOS ANG)

“60”

 

(ANGTOS ANG 0)

“60”

 

(ANGTOS ANG 2 3)

"66.667g"

 

(ANGTOS ANG 3 3)

"1.047r"

(SETQ ANG(/ PI 3.3))

(ANGTOS ANG 1 2)

“54d33'”

 

(ANGTOS ANG 1 3)

“54d32'44"”

 

(ANGTOS ANG 2 2)

"60.61g"

 

(ANGTOS ANG 4 3)

"N 35d27'16" E"

Функция (ASCII <текст>) выделяет первый символ и возвращает его ASCII десятичный код.

Например :

(ASCII “autolisp”) ® 97; (ASCII “Autolisp”) ® 65.

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

Например:

(ATOF “8.66”) ® 8.66; (ATOF “8”) ® 8.0.

Функция (ATOI <строка>) преобразует число, заданное в виде цепочки символов, в целое число и его возвращает.

Например:

(ATOI “8.66”) ® 8; (ATOI “8”) ® 8.

Функция (CHR <число>) преобразует ASCII-код аргумента <число> в символ и его возвращает.

Например:

(CHR 65) ® “А”; . (CHR 97) ® “а”.

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

Например :

(CVUNIT 1 "MINUTE" "SECOND") ® 60.0;

(CVUNIT 1 "CM" " SECOND ") ® NIL;

(CVUNIT 1.0 "INCH" "CM") ® 2.54;

(CVUNIT '(1.0 2.5 3) "M" "MM") ® (1000.0 2500.0 3000.0).

Функция (DISTOF <строка> [формат]) преобразует символьное выражение действительного числа в числовое значение и возвращает значение в указанном формате.

Аргумент <строка> должен соответствовать указанному формату, он может быть в той же форме, в какой возвращается функцией RTOS или в виде, принятом в Автокаде при вводе с клавиатуры. Функции DISTOF и RTOS дополняют друг друга, выполняя обратные действия.

Значения аргумента <формат>: 1 – научные единицы (числа с плавающей точкой и знаком экспоненты); 2-десятичные числа; 3 – инженерные американские единицы (футы и десятые дюйма); 4 - архитектурные единицы (футы и дробные дюймы); 5 – дробные числа.

Например :

(DISTOF“5.5”) ® 5.5; (DISTOF“5.5e3”1) ® 5500; (DISTOF "5" 4)> 5.0.

Функция (FIX <число>) возвращает преобразованное действительное число в ближайшее целое меньшей величины, отбрасывая дробную часть.

Например:

(FIX 3.) ® 3; (FIX 3.7) ® 3.

Функция (FLOAT <число>) возвращает действительное значение числа.

Например:

(float 5) ® 5.0; (float 3.75) ® 3.75.

Функция (ITOA <целое число>) возвращает символьное значение целого числа.

Например:

(ITOA 35) ® "35"; (ITOA -27) ® "-27".

Функция (RTOS <действительное число [формат [точность]]>) возвращает символьное значение действительного числа. RTOS выполняет преобразования в соответствии с установленными аргументами [формат [точность]] и системными переменными UNITMODE и DIMZIN. Аргументы [формат [точность]] являются целыми числами и соответствуют системным переменным LUNITS и LUPREC. Если эти аргументы опущены, тогда используются текущие значения LUNITS и LUPREC. Значения аргумента <формат>, такие как у функции DISTOF.

Например:

(RTOS 5.5) ® “5.5”; (RTOS 5.5e3 1) ® “5.50E+03”;

(RTOS 5.5E+2 1 5)> "5.50000E+02"

Функция (TRANS <3D точка> <коор_сис1> <коор_сис2> [вектор]) перемещает точку или вектор из одной системы координат в другую. Если аргумент [вектор] указан и не NIL, то производится перемещение вектора. Значения аргументов <коор_сис1> < коор_сис2> задаются целыми числами:

0 - мировые координаты (World -WCS);

1 - координаты, установленные пользователями (UCS);

2 - дисплейные координаты (DCS);

3 - страничные координаты DCS.

Например, задана UCS, которая повернута на 90° против часовой стрелки вокруг World Z оси, тогда функция

(TRANS '(1.0 2.0 3.0) 0 1) > (2.0 -1.0 3.0),

а (TRANS '(1.0 2.0 3.0) 1 0) > (-2.0 1.0 3.0).

 



Назад Далее