3.5 Добавление команд в АвтоКАД

Наконец, мы готовы объединить все составные части в команду АвтоКАДа. Если мы определим функцию с именем C:XXX на языке АвтоЛИСП, вводя ХХХ (предполагая,что ХХХ не является командой АвтоКАДа) мы активизируем функцию. Для завершенности ввода в работу нашей команды PATH, мы определяем функцию C:PATH, что дает возможность нам впоследствии после загрузки GP.LSP напечатать только PATH и наша команда garden path будет вычисляться.

Используйте ваш текстовый редактор для добавления указанной строчки в GP.LSP, затем запустите АвтоКАД и загрузите программу.

С добавлением функции C:PATH, мы добавили команду PATH в АвтоКАД. Вы можете проверить команду, осуществив следующий ввод:

Команда: PATH

Начальная точка дорожки: 2,2

Конечная точка дорожки: 9,8

Половина ширины дорожки: 2

Радиус плиты: .2

Расстояние между плитами: .1

3.6 Замораживание

Так как наша команда PATH выполняется, все команды, которые она представляет в АвтоКАД, будут передаваться в область команд/подсказок и все выбранные ею точки будут отмечаться на экране маленькими черточками (метками). Раз командная функция налажена, для появления вводных команд АвтоЛИСПа точно похожих на команды АвтоКАДа, этот ввод может быть отменен.

Применение функции GETVAR необходимо, чтобы получить текущие значения режимов АвтоКАДА BLIPMODE и CMDECHO. Они сохраняются через SETQ в SBLIP и SCMDE. Затем мы применяем функцию SETVAR для того, чтобы установить обе эти переменные АвтоКАДа в нулевое положение; этим делая недействительными метки и переданные команды. Обратите внимание, что мы установили эти переменные в нулевое положение после получения ввода от пользователя через GPUSER. Мы хотим, чтобы метки остались для подтверждения ввода пользователя.

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

Сохраните файл, запустите АвтоКАД и попробуйте сейчас команду PATH. Испробуйте ее со всех сторон, определяя различные виды ввода как при помощи поинтера, так и клавиатуры.

3.7 Резюме

За короткий период времени вы ввели новую команду в АвтоКАД. Во многих системах КАД вам понадобится следующее: доступ к исходному коду системы КАД, квалификация программиста и большой запас знаний для проделывания операций, подобно этой. Открытая архитектура АвтоКАДа и АвтоЛИСПа предоставляет вам возможности, которые большинство продавцов систем КАД приберегают для себя.

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

Поскольку вы запустили АвтоЛИСП в работу, вы перешли на новый уровень совершенства в АвтоКАДе. По мере использования АвтоЛИСПа для автоматизации изготовления чертежей и конструкторских задач, вы освободите себя от различных деталей и сможете полностью посвятить себя проектированию. В "лице" АвтоЛИСПа вы приобрели неутомимого помощника, который будет служить вам десятилетия.

Глава 4

Функции АвтоЛИСПа

АвтоЛИСП снабжен многочисленными предопределенными функциями. Каждая функция вызывается путем задания ее имени (верхний или нижний регистр) как первого элемента списка, с параметрами (если такие существуют) как последующими элементами списка.

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

4.1 (+ ...)

Эта функция вводит сумму всех . Она может применяться с действительными и целыми числами. Если - целые числа, результат будет выражен целыми числами; если же одно из чисел - действительное, целые числа переходят в действительные и результат будет выражен действительным числом.

Например:

(+1 2) вводит 3

(+1 2 3 4.5) вводит 10.500000

(+1 2 3 4.0) вводит 10.000000

4.2 (- < number > ...)

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

Например:

(-50 40) вводит 10

(-50 40.0 2) вводит 8.000000

(-50 40.0 2.5) вводит 7.500000

(-8) вводит -8

4.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 ( 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


Информация о работе «АвтоЛИСП - реализация языка программирования»
Раздел: Информатика, программирование
Количество знаков с пробелами: 92410
Количество таблиц: 6
Количество изображений: 0

Похожие работы

Скачать
138339
34
32

... для загрузки конвейера (зав. № 1) крупнокусковой (более 450…550 мм) железной рудой с высоты 4,5 м. 11-12 ноября 1998 г. вопросы организации в г.Брянске серийного производства конвейеров с подвесной лентой конструкции ИПЦ «КОНВЕЙЕР» были рассмотрены и одобрены на проведенном в г. Губкин Белгородской обл. Международном семинаре-совещании специалистов предприятий, занимающихся производством ...

0 комментариев


Наверх