АвтоЛИСП - реализация языка программированияРефераты >> Программирование и компьютеры >> АвтоЛИСП - реализация языка программирования
(atof "3") вводит 3.000000
4.24 (atoi <string>)
Эта функция вводит преобразование строки в целое число.
(atoi "97") вводит 97
(atoi "3") вводит 3
(atoi "3.9) вводит 3
4.25 (atom <item>)
Эта функция вводит ноль, если <item> - список, в противном случае вводится 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 <func> <int1> <int2> .)
Это основная подразрядная булевая функция. <Func> - целое число от 0 до 15, представляющая одну из 16 возможных булевых функций на двух переменных. Последовательные параметры в виде целых чисел подразрядно (логически) скомбинированы, основываясь на этих функциях и истинностной таблице:
Int1 Int2 Func bit
---------------------
0 0 8
0 1 4
1 0 2
1 1 1
Каждый бит <int1> имеет пару соответствующего бита <int2>, выбирая один горизонтальный ряд истинностной таблицы. Бит результата или ноль, или 1, в зависимости от установки бита <func>, соответствующего этому ряду истиностной таблицы. Если соответствующий бит задан в <func>, бит результата 1, в противном случае бит результата - 0.
Некоторые значения для <func> эквивалентны стандартным булевым операциям 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.
Вы можете применять другие значения <func> для выполнения других булевых операций, для которых эти имена не являются стандартными. Например, если <func> - 4 , биты результата заданы, если заданы соответствующие биты в <int2>, но не в <int1>. Таким образом:
(Boole 4 3 14)
введет 12.
4.27 (boundp <atom>)
Эта функция вводит T, если <atom> имеет значение, близкое к нему (не взирая на контекст). Если же нет значения, близкого к <atom> (или если оно близко к нулю), вводится ноль. Например, заданы назначения:
(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 <list>)
Эта функция вводит первый элемент <списка> . Если <список> пустой, вводится ноль. Например:
(car '(a b c)) вводит A
(car '((a b) c)) вводит (A B)
(car '()) вводит nil
4.30 (cdr <list>)
Эта функция вводит весь <список>, кроме его первого элемента. Если <список> пустой, вводится ноль. Например:
(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 <number>)
Эта функция вводит переход целых чисел, представленных в знаковом коде ASCII, в однознаковую строку (аналогично функции CHRS в языке БЕЙСИК). Например:
(chr 65) вводит "A"
(chr 66) вводит "B"
(chr 97) вводит "a"
4.32 (close <file-desc>)
Эта функция закрывает файл и вводит ноль. <File-desc> - дескриптор файла (оприсатель), полученный из функции OPEN. После CLOSE дескриптор файла не изменяется, но становится недействительным. Например, представьте, что Х - действительный открытый дескриптор файла,
(close x )
закроет предполагаемый файл и введет ноль.
4.33 (command <arqs> .)
Эта функция выполняет команду АвтоКАДа в пределах АвтоЛИСПа и всегда вводит ноль. Параметры, представляющие команды АвтоКАДа, и их подкоманды, каждый параметр высчитывается в АвтоКАД в качестве ответа на последующие подсказки. Имена команд и опции запускаются в виде строчек, точки 2D как списки из двух действительных чисел и 3D точки как списки из трех действительных чисел. Имена команд узнаются АвтоКАДом только при выходе подсказки "Command". Например:
(setq pt1 '(1.45 3.23))
(setq pt2 (getpoint "Enter a point: "))
(command "line" pt1 pt2)
(command "")
Предполагая, что подсказка АвтоКАДа "Command" не выполняется, указанная выше последовательность выражений устанавливает значение для точки "pt1", выдает подсказку для точки "pt2" и выполняет команду АвтоКАДа LINE с двумя точками как данными ввода. Параметрами COMMAND могут быть строчки, действительные и целые числа или точки, как предусматри-вается последовательностью подсказки для выполнения команды АвтоКАДа. Нулевая строчка ("") эквивалентна печатанью пробела на клавиатуре. Вызов COMMAND без параметров эквивалентен печатанию CTR C на клавиатуре; это отменит большинство команд АвтоКАДа.
Команды, выполняемые из функции COMMAND, не отражаются на экране, если система переменных АвтоКАДа CMDECHO (выбранная из SETVAR или GETVAR) установлена на нуле. Функция COMMAND - основной метод выбора команд АвтоКАДа из АвтоЛИСПа.
Вводимые функции пользователя
"GETxxx" (GETANGLE, GETSTRING, GETINT, GETPOINT) не могут применяться внутри функции. Попытка проделать это, приведет в результате к появлению сообщения: