Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Глава 4 Функции AutoLISPа (4.76 - 4.122)

4.76. (menucmd <строка>)

Эта функция дает возможность LISP-программам переключаться среди подстраниц в меню AutoCAD . Таким образом LISP-программа может согласованно работать с загруженными файлами меню, высвечивая соответствующие подменю в то время, когда требуется ввод пользователя. MENUCMD всегда возвращает nil. Аргумент <строка> записывается в следующей форме:

      раздел = подменю

где:

раздел меню Допустимые имена
S для Экранного (SCREEN) меню
B для Kнопочного (BUTTONS) меню
I для пиктографического (ICON) меню
P1-P10 для падающего (POP) меню с 1 по 10
Т1-Т4 для меню планшета (TABLET) с 1 по 4
А1 для добавочного (AUX1) меню
Подменю Указывает какое подменю активизировать. Именем должна быть либо одна из меток подменю (без "**") в текущем загруженном файле или имя одного из разделов Главного меню.

Для дальнейшей информации смотрите Приложение Б Руководства AutoCAD. Заметим, что используемый для ссылки на подменю знак "$" в файле меню здесь не используется.

Hапример:
      (menucmd "S=OSNARP")

будет означать, что подменю "OSNAP" появится на экране (имеется в виду, что такое подменю существует в текущем файле меню). Так же:

      (menucmd "B=MY-BUTTONS")
будет присваивать подменю "MY-BUTTONS" кнопочному меню.

Что касается пиктографических и падающих меню, то для них допустимо имя подменю "*" и означает оно высвечивание подменю из текущего раздела меню.

Hапример:
      (menucmd "P1=NUMERIC")
      (menucmd "P1=*")

выберет подменю "NUMERIC" из падающего меню 1 и высветит его на экране.

MENUCMD всегда возвращает nil.

4.77. (min <число> <число>...)

Эта функция возвращает наименьшее из заданных <чисел>. Kаждое <число> может быть действительным или целым.

Hапример:
      (min 683 -10.0)               возвращает  -10.000000
      (min 73 2 48 5)               возвращает  2

4.78. (minusp <элемент>)

Эта функция возвращает T, если <элемент> действительное или целое число имеющее отрицательное значение, иначе она возвращает nil. Она не определена для других типов <элементов>.

Hапример:
      (minus -1)                    возвращает  T
      (minusp -4.293)               возвращает  T
      (minusp 830.2)                возвращает  nil

4.79. (not <элемент>)

Эта функция возвращает Т, если выражение - nil, иначе nil. Обычно функция NULL используется для списков, а NOT для других типов данных в связи с каким-либо типом управляющих функций.

Hапример, дано:
      (setq a 123)
      (setq b "string")
      (setq c nil)
тогда:
      (not a)                       возвращает  nil
      (not b)                       возвращает  nil
      (not c)                       возвращает  T
      (not '())                     возвращает  T

4.80. (nth <n> <список>)

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

Hапример:
      (nth 3 '(a b c d e))          возвращает  D
      (nth 0 '(a b c d e))          возвращает  A
      (nth 5 '(a b c d e))          возвращает  nil

4.81. (null <элемент>)

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

Hапример, дано:
      (setq a 123)
      (setq b "string")
      (setq c nil)
тогда:
      (null a)                      возвращает  nil
      (null b)                      возвращает  nil
      (null c)                      возвращает  T
      (null '())                    возвращает  T

4.82. (numberp <элемент>)

Эта функция возвращает Т, если <элемент> - целое или действительное число, иначе nil.

Hапример, дано:
      (setq a 123)
      (setq b 'a)
тогда:
      (numberp 4)                   возвращает  T
      (numberp 3.8348)              возвращает  T
      (numberp "Howdy")             возвращает  nil
      (numberp 'a)                  возвращает  nil
      (numberp a)                   возвращает  T
      (numberp b)                   возвращает  nil
      (numberp (eval b))            возвращает  T

4.83. (open <имя файла> <режим>)

Эта функция открывает файл для доступа функций Ввода/Вывода (I/O) AutoLISP. Она возвращает описатель файла для использования другими функциями Ввода/Вывода, поэтому она должна присваиваться функцией SETQ символу.

Hапример:
      (setq a (open "file.ext" "r"))

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

Режим OPEN Описание
“r” Открыть для чтения. Если <имя файла> не существует, возвращается nil.
“w” Открыть для записи. Если <имя файла> не существует, создается новый файл и открывается. Если <имя файла> уже существует, находящиеся в нем данные будут перезаписаны.
“a” Открыть для добавления. Если <имя файла> не существует, создается новый файл и открывается. Если <имя файла> уже существует, он будет открыт и помещен таким образом, что любые новые данные будут записываться в файл вслед за уже существующими. В системах DOS некоторые программы и текстовые редакторы записывают текстовые файлы с маркером конца файла (CTRL Z, десятичный код ASCII 26) в конце текста. Читая текстовый файл, DOS возвращает состояние конца файла, если встретит маркер CTRL Z, даже если после маркера присутствуют еще данные. Если вы намерены использовать режим "а" функции OPEN для добавления данных в файлы, созданные другими программами, удостоверьтесь, что другая программа не вставила маркеры CTRL Z в конце своих текстовых файлов.

Предположим, что поименованные файлы в следующем примере не существуют:

      (setq f (open "new.tst" "w"))       возвращает <File #nnn>
      (setq f (open "nosuch.fil" "r"))    возвращает nil
      (setq f (open "longfile" "a"))      возвращает <File #nnn>

<имя файла> может включать префикс директории, как, например, "/test/func3". На системах MS-DOS/PS-DOS допускается так же использовать букву устройства ввода/вывода и вы можете пользоваться обратной косой чертой вместо прямой косой черты (но помните, чтобы ввести в строку одну обратную черту вы должны использовать "\\").

Например:
      (setq f (open "new.tst" "w"))       возвращает <File #nnn>
      (setq f (open "nosuch.fil" "r"))    возвращает nil

4.84. (or <выражение>...)

Эта функция возвращает логическое ИЛИ списка выражений. OR оценивает выражения слева направо до тех пор, пока не встретится выражение, вычисляемое не в nil. Если такое найдено, OR прекращает дальнейшую оценку и возвращает T. Если все выражения nil, OR возвращает nil.

Например:
      (or nil 45 '())               возвращает Т.
      (or nil '())                  возвращает nil.

4.85. (osnap <точка> <строка-режим>)

Эта функция возвращает точку, которая является результатом применения объектной привязки, задаваемой в <строке-режим> для точки <точка>. <строка-режим> - строковая константа, состоящая из одного или более идентификаторов объектной привязки, как, например, "midpoint", "center" и т.д., разделенных запятыми.

Например:
            (setq pt2 (osnap pt1 "midp"))
            (setq pt2 (osnap pt1 "midp,endp,center"))

Если аргумент <точка> - 2-х мерная точка (список из двух действительных чисел), то будет возвращена 2-х мерная точка. Если аргумент <точка> - 3-х мерная точка (список из трех действительных чисел), то будет возвращена 3-х мерная точка. Если ни одной точки, соответствующей заданному <режиму> объектной привязки не найдено, будет возвращаться nil.

      4.86 pi
Это не функция, это константа pi. Ее значение принято 3.1415926.

4.87. (polar <точка> <угол> <расстояние>)

Эта функция возвращает точку, находящуюся под углом <угол> и на расстояние <расстояние> от заданной <точки>. Точки - список двух действительных чисел и <угол> выражается в радианах.

Например:
      (polar '(1.0 1.0) 0.785398 1.414214)      возвращает (2.000000 2.000000)

4.88. (prin1 <выражение> [<описатель файла>])

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

Например, дано:
      (setq a 123)
      (setq b '(a))
тогда:
      (prin1 'a)        печатает А        и     возвращает А
      (prin1 a)         печатает 123      и     возвращает 123
      (prin1 b)         печатает (А)      и     возвращает (А)
      (prin1 "Hello")   печатает "hello"  и     возвращает "Hello"

Каждый из выше приведенных примеров печатается на экране, т.к. не был указан <описатель файла>. Предположим, что F - допустимый описатель файла для файла, открытого для записи:

      (prin1 "Hello" f)
запишет "Hello" в указанный файл и возвратит "Hello".

Если <выражение> - это строковая константа, включающая управляющие символы, PRIN1 интерпретирует эти символы, как следующие, добавляя перед ними знак "\":

      \е        для выхода (escape)
      \n        для перехода на новую строку (newline)
      \r        для ввода (return)
      \t        для табуляции (tab)
      \nnn      для символа, восьмеричный код которого nnn.
так:
      (prin1 (chr 2))   печатает "\002"         и возвращает "\002"
      (prin1 (chr 10))  печатает "\n"           и возвращает "\n"

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

Например, пусть:
      (defun C:SETUP ()
            (setvar "LUNITS" 4)
            (setvar "BLIPMODE" 0)
            (prin1)
      )
тогда:
     Command: SETUP

исполнит определенную пользователем команду, отвечая на запросы функции SETVAR, и вернется к подсказке AutoCADа "Command:", не выводя на экран никаких лишних сообщений.

4.89. (princ <выражение> [<описатель файла>])

Эта функция похожа на PRIN1, кроме того, что управляющие символы в <выражении> печатаются без расширения. Вообще PRIN1 создана для печати выражений путем, совместимым с функцией LOAD, в то время как PRINC будет печатать их таким путем, чтобы они могли считываться функциями типа READ-LINE.

4.90. (print <выражение> [<описатель файла>])

Эта функция похожа на PRIN1, кроме того, что <выражение> печатается с новой строки, а после <выражения> ставится пробел.

4.91. (progn <выражение>...)

Эта функция вычисляет каждое <выражение> последовательно и возвращает значение последнего выражения. Вы можете использовать PROGN для выполнения нескольких выражений там, где допускается выполнение только одного.

Hапример:
      (if (= a b)
            (progn
                  (setq a (+ a 10))
                  (setq b (- b 10))
            )
      )

Функция IF нормально выполняет одно выражение "then" /тогда/, если условие выполняется и не равно nil. В этом примере мы использовали PROGN, чтобы выполнялось два выражения вместо одного.

4.92. (prompt <сообщение>)

Эта функция высвечивает сообщение в поле подсказок экрана и возвращает nil. <сообщение> - строка символов. В системе AutoCAD с двумя экранами PROMT высвечивает <сообщение> на обоих экранах и поэтому предпочтительно использовать PRINC.

Hапример:
      (prompt "Hовое значение: ")
высвечивает "Hовое значение: " на экране (экранах) и возвращает nil.

4.93. (quote <выражение>)

Возвращает выражение не выполняя его. Это может быть так же записано:

      'выражение
Hапример:
      (quote a)               возвращает А
      (quote сat)             возвращает CАT
      (quote (a b))           возвращает (А B)
      'a                      возвращает А
      'cat                    возвращает CАT
      '(a b)                  возвращает А

Последние три примера не будут работать, если их набрать непосредственно с клавиатуры в ответ на запрос AutoCAD. Помните, что такой ввод должен начинаться с "(" или "!" с целью интерпретации их как выражений LISP.)

4.94. (read <строка>)

Эта функция возвращает первый список или атом из данной <строки>. <строка> не должна содержать пробелы.

Hапример:
      (read "hello")          возвращает HELLO
      (read "hi")             возвращает HI
      (read "(a)")            возвращает (A)

4.95. (read-char [<описатель файла>])

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

Если не задано <описателя файла> и в буфере ввода клавиатуры нет символов, READ-CHAR ждет, чтобы вы ввели что-либо с клавиатуры (заканчивающееся RETURN). Hапример, допустим, что буфер клавиатуры пуст:

      (read-char)

будет ждать какого-либо ввода. Если вы набрали "АВС", завершив ввод RETURN, READ-CHAR возвратит 65 (код AS0CII буквы "А" (латинской)). Следующие три обращения к READ-CHAR возвратят 66,67 и 10 (переход на новую строку) соответственно. Если затем последует еще одно обращение к READ-CHAR, она будет ждать ввода.

4.96. (read-line [<описатель файла>])

Эта функция считывает строку символов с клавиатуры или из открытого файла, заданного <описателем файла>; READ-LINE возвращает nil, иначе она возвращает строковое значение, которое было считано. Hапример, допустим, что F - это разрешенный указатель открытого файла:

      (read-line f)
возвратит следующую введенную строку из файла или (если достигнут конец файла) nil.

4.97. (redraw [<имя примитива> [<режим>]])

Действие функции зависит от числа введенных аргументов. Если она вызывается без аргументов:

      (redrow)

будет нарисован весь чертеж, точно так же, как это делает команда AutoCAD REDRAW. Если вызывается с аргументом <имя примитива>:

      (redraw <имя примитива>)

выбранный примитив будет перерисован. Это используется для идентификации примитива на экране после использования функции GRCLEAR для очистки экрана. Имена примитивов описаны в главе 5 настоящего руководства. Полный контроль за перерисованием примитива обеспечивается вызовом REDRAW с двумя аргументами:

      (redraw <имя примитива> <режим>)

где <имя примитива> - это имя перерисовываемого примитива, а <режим>- это целое число с одним из следующих значений:

Режим REDRAW Действие
1 Перечерчивание примитива на экране
2 не рисует примитив (стирает)
3 Подсвечивает примитив (если может дисплей)
4 Перестает подсвечивать примитив (если может дисплей)

Если <имя примитива> - заголовок сложного примитива (Полилинии или Блока с атрибутами), в процессе перерисовки будут участвовать как основной примитив, так и все подпримитивы, если аргумент <режим> положителен. Если же аргумент <режим> отрицателен, то только основной примитив будет участвовать в процессе REDRAW.

4.98. (rem <число1> <число2>)

Эта функция делит <число1> на <число2> и возвращает остаток от деления (<число1> mod <число2>). REM может использоваться с целыми и действительными величинами со стандартными правилами преобразования.

Например:
      (rem 42 12)             возвращает 6
      (rem 12.0 16)           возвращает 12.000000
      (rem 60 3)              возвращает 0

4.99. (repeat <число> <выражение>...)

В этой функции <число> представляется любой положительной целой величиной. Функция выполняет каждое <выражение> заданное <число> раз и возвращает значение последнего выражения.

Например, дано:
      (setq a 10)
      (setq b 100)
тогда:
      (repeat 4
            (setq a (+ a 10)))
            (setq b (+ b 10)))
      )                                   возвращает 140.

4.100. (reverse <список>)

Эта функция возвращает <список> с его элементами, расставленными в обратном порядке.

Например:
      (reverse '((a) b c))          возвращает (С В (А))

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

Эта функция возвращает строковую константу, которая представляет <число> (действительная величина) в соответствии со значениями <режима>, <точности> и размерной переменной AutoCAD DIMZIN. <Режим> и <точность> - целые величины, которые назначают режим представления и его точность. Ниже представлены значения <режима>:

Режим RTOS Формат представления
1 Научный
2 Десятичный
3 Инженерный (футы и десятичные дюймы)
4 Архитектурный (футы и дробные дюймы)
5 Произвольные дробные части

Аргументы <режим> и <точность> соответствуют системным переменным AutoCAD LUNITS и LUPREC. Если опустили эти аргументы, то будут использованы текущие значения LUNITS и LUPREC.

Примеры RTOS:
      (rtos 17.5 1 4)         возвращает  "1.7500E+01"
      (rtos 17.5 2 2)         возвращает  "17.50"
      (rtos 17.5 3 2)         возвращает  "1'-5.50""
      (rtos 17.5 4 2)         возвращает  "1'-5 1/2""
      (rtos 17.5 5 2)         возвращает  "17 1/2"

4.102. (set <символ> <выражение>)

Присваивает <символу> (где <символ> - имя символа с кавычкой спереди) значение <выражения> и возвращает это значение.

Например:
      (set 'a 5.0)            возвращает 5.000000 и устанавливает в символ А
      (set (quote b) 'a)      возвращает А и устанавливает в символ В.

Если SET используется с символьным именем без кавычки, она может присвоить новое значение косвенно другому символу.

Например, возьмем вышеприведенные примеры:
      (set b 640)             вернет 640

и присвоит значение 640 символу А (поскольку это значение символа В). Смотрите также ниже SETQ.

4.103. (setq <символ1> <выражение1> [<символ2> <выражение2>]...)

Эта функция устанавливает в <символ1> значение <выражения1>, в <символ2> значение <выражения2> и т.д. Это основная функция присвоения в AutoLISPе.

Hапример:
      (setq a 5.0)            возвращает 5.000000

и присваивает значение 5.000000 символу А. Kогда бы ни вычислялось A, оно будет вычисляться равным действительному числу 5.000000.

Другие примеры:
      (setq b 123 c 4.7)      возвращает 4.7
      (setq s "it")           возвращает "it"
      (setq x '(a b))         возвращает (A B)

Функции SET и SETQ создают или модифицируют глобальные символы в тех случаях, когда функции не используются в функции DEFUN для присваивания значений аргументу функции или символу, объявленному как локальному для этой DEFUN.

Hапример:
      (setq glo1 123)   ; создание глобального символа
      (defun demo (arg1 arg2 / loc1 loc2)
            (setq arg1 234) ; присвоение нового локального значения
            (setq log1 345) ; присвоение нового локального значения
            (setq glo1 456) ; присвоение нового глобального значения
            (setq glo2 567) ; создание нового глобального символа
      )

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

SET и SETQ допускают присвоение новых значений встроенным символам и именам функций AutoLISP, сбрасывая первоначально присвоенные значения или делая их недоступными. Hекоторые пользователи тщетно пытаются сделать следующее:
              (setq anagle (...))     Hеверно!
              (setq length (...))     Hеверно!
              (setq max (...))        Hеверно!
              (setq t (...))          Hеверно!
              (setq pi 3.0))          Hеверно!!!
Чтобы избежать всех видов таких странных ошибок, будьте внимательны, когда придумываете имена своим символам. Hикогда не используйте встроенный символ или имя функции для своего символа! (Для уничтожения списка имен символов наберите "!АТОМLIST" на запрос "Command:" AutoCAD перед загрузкой (LOAD) какой-либо функции AutoLISP.)

4.104. (setvar <имя-переменной> <значение>)

Эта функция присваивает системной переменной AutoCAD заданное <значение> и возвращает это значение. Имя переменной должно быть заключено в двойные кавычки.

Hапример:
      (setvar "FILLETRAD" 0.50)     возвращает 0.500000
устанавливает радиус сопряжения в AutoCAD равным 0.5 единиц.

Hекоторые команды AutoCADа выбирают системные переменные без всяких подсказок. Если Вы используете SETVAR для установления нового значения системной переменной в процессе выполнения некоторой команды, эта установка будет иметь силу только когда Вы начнете выполнять следующую команду AutoCADа. Список текущих системных переменных AutoCAD можно найти в приложении А руководства AutoCAD. Смотрите также функцию GETVAR.

4.105. (sin <угол>)

Эта функция возвращает синус <угла> как действительное число, где <угол> выражен в радианах.

Hапример:
      (sin 1.0)                     возвращает 0.841471
      (sin 0.0)                     возвращает 0.000000

4.106. (sqrt <число>)

Эта функция возвращает квадратный корень <числа> как действительное число.

Hапример:
      (sqrt 4)                      возвращает 2.000000
      (sqrt 2.0)                    возвращает 1.414214

4.107. (strcase <строка> [<признак>])

STRCASE берет строковую константу, указанную аргументом <строка> и возвращает ее копию, переведя все символы алфавита в верхний или нижний регистр в зависимости от аргумента <признак>. Если <признак> опущен или равен nil, то все символы алфавита в <строке> будут переведены в нижний регистр.

Hапример:
      (strcase "Sample")            возвращает "SAMPLE"
      (strcase "Sample" Т)          возвращает "sample"

4.108. (strcat <строка1> <строка2>...)

Эта функция возвращает строку, которая является результатом сцепления <строки1>, <строки2> и т.д.

Hапример:
      (strcat "a" "bout")           возвращает "about"
      (strcat "a" "b" "c")          возвращает "abc"
      (strcat "a" "" "c")           возвращает "ac"

4.109. (strlen <строка>)

Эта функция возвращает длину в символах строковой константы <строка> как целую величину.

Hапример:
      (strlen "abcd")               возвращает 4
      (strlen "ab")                 возвращает 2
      (strlen "")                   возвращает 0

4.110. (subst <новый элемент> <старый элемент> <список>)

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

Hапример, дано:
      (setq sample '(a b (c d) b))
тогда:
      (subst 'qq 'b sample)               возвращает (A QQ (C D) QQ)
      (subst 'qq 'z sample)               возвращает (A B (C D) B)
      (subst 'qq '(c d) sample)           возвращает (A B QQ B)
      (subst '(qq 'rr) '(c d) sample)     возвращает (A B (QQ RR) B)
      (subst '(qq 'rr) 'z sample)         возвращает (A B (C D) B)

В сочетании с функцией ASSOC, SUBST обеспечивает удобный способ замены величины, найденной по ключу в структурированном списке.

Hапример, дано:
      (stq who '((ferst john) (mid q) (last public)))
тогда:
      (setq old
             (assoc 'first who)
      )                             возвращает (FIRST JOHN)
      (setq new '(first j))         возвращает (FIRST J)
      (setq new old who)            возвращает ((FIRST J) (MID Q) (LAST PUBLIC))

4.111. (substr <строка> <начало> [<длина>])

Эта функция возвращает подстроку <строка>, начинающуюся с <начал>ьного символа и содержащую число символов, заданное в аргументе <длина>. Если <длина> не указана, то подстрока продолжается до конца <строки>. <Hачало> (и длина, если присутствует) должны быть положительными целыми величинами. Первый символ <строки> - символ с номером 1.

Hапример:
      (substr "abcde" 2)            возвращает "bcde"
      (substr "abcde" 2 1)          возвращает "b"
      (substr "abcde" 3 2)          возвращает "cd"

4.112. (terpri)

Эта функция печатает новую строку на экране. Она также возвращает новую строку. TERPRI не используется для ввода/вывода файлов. Для записи новой строки в файл используйте PRINT или PRINC.

4.113. (textscr)

Функция TEXTSCR переключает экран с графического в текстовой режим в одноэкранных системах (как функциональная клавиша "FLIP SCREEN" в AutoCAD). TEXTSCR всегда возвращает nil. Смотрите также функцию GRAPHSCR.

4.114. (trace <функция>...)

Эта функция - средство отладки. Она устанавливает знак трассировки для заданных <функций> и возвращает имя последней функции. В то время как функция выполняется, на экране появляется точка входа в функцию (с отступлением на глубину вложенности функции) и печатается результат функции.

Hапример:
      (trase my-func)         возвращает  MY-FUNC

и устанавливает символ трассировки для функции MY-FUNC. Cмотрите также функцию UNTRACE.

4.115. (type <элемент>)

Эта функция возвращает TYPE (тип) <элемента>, где TYPE - одно из следующих значений (как атом):

      REAL          числа с плавающей запятой
      FILE          описатель файлов
      STR           строковые константы
      INT           целые величины
      SYM           символы
      LIST          списки (и функции пользователя)
      SUBR          внутренние функции AutoLISP
      PITCKSET      наборы AutoCAD
      ENAME         имена примитивов AutoCAD
      PAGETB        таблица диспетчера страниц
Hапример, дано:
      (setq a 123 r 3.45 s "Hello!" x '(a b c))
      (setq f (open "name" "r"))
тогда:
      (type 'a)         возвращает  SYM
      (type a)          возвращает  INT
      (type f)          возвращает  FILE
      (type r)          возвращает  REAL
      (type s)          возвращает  STR
      (type x)          возвращает  LIST
      (type +)          возвращает  SUBR
Следующий пример иллюстрирует использование функции TYPE.
      (defun isint (a)
            (if (= (type a) 'INT)         ; является ли тип целым?
                  Т                       ; если да - верни Т
                  nil                     ; если нет - верни nil
            )
      )

4.116. (untrace <функция>...)

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

Например:
      (untrace my-func) возвращает  MY-FUNC

и убирает символ трассировки для функции MY-FUNC. Смотрите также TRACE.

4.117. (ver)

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

Форма строки:
      "AutoLISP Release X.X"
где Х.Х - номер текущей версии. Hапример:
      (ver)       возможный возврат "AutoLISP Release 9.0"

4.118. (while <тест-выражение> <выражение>...)

Эта функция вычисляет <тест-выражение> и, если оно не является nil, вычисляет другие выражения, затем снова проверяет <тест-выражение>. Это продолжается до тех пор, пока <тест-выражение> не nil. Затем WHILE возвращает самое позднее значение последнего <выражения>.

Hапример, дано:
      (setq a 1)
тогда:
      (while (<= a 10)
            (some-func a)
            (setq a (1+ a))
      )

будет вызвана функция пользователя SOME-FUNC десять раз, с А равным от 1 до 10. Будет затем возвращено 11, что является значением последнего выражения.

4.119. (write-char <число> [<описатель файла>])

Эта функция записывает один символ на экран или в открытый файл, заданный <описателем файла>. <число> - это код ASII символа, и является значением, возвращаемым функцией.

Hапример:
      (write-char 67)               возвращает  67
и записывает латинскую букву С на экране. Предположим, что F – описатель открытого файла:
      (write-char 67 f)             возвращает  67
и записывает латинскую букву С в этот файл.

4.120. (write-line <строка> [<описатель файла>])

Эта функция записывает строковую константу <строка> на экране или в открытый файл, заданный <описателем файла>. Она возвращает <строку>, взятую в кавычки, и опускает кавычки когда записывается в файл.

Hапример, предположим, что F это допустимый описатель открытого файла:
      (write-line "Test" f)   записывает  Test  и возвращает      "Test".

4.121. (zerop <элемент>)

Эта функция возвращает T, если <элемент> действительное или целое число, равное нулю, иначе возвращает nil. Она не определена для других типов <элементов>.

Hапример:
      (zerop 0)               возвращает Т
      (zerop 0.0)             возвращает Т
      (zerop 0.0001)          возвращает nil

4.122. (*error* <строка>)

Это, определяемая пользователем функция, трактующая ошибки. Если она не nil, она выполняется как функция всякий раз, когда присутствует проверка ошибок AutoLISP. Она выдает один аргумент - строку, состоящую из описания ошибки.

Hапример:
      (defun *error* (msg)
            (princ "error:")
            (princ msg)
            (terpri)
       )

Эта функция будет делать тоже самое, что и стандартная функция трактовки ошибок AutoLISP - печать "error:" и описание.



Copyright © Сайт поддержки пользователей САПР