АвтоЛИСП - реализация языка программированияРефераты >> Программирование и компьютеры >> АвтоЛИСП - реализация языка программирования
(numberp b) вводит nil
(numberp (eval b)) вводит T
4.83.(open <filename><mode>)
Эта функция открывает файл для обращения к нему I/O функции АвтоЛИСПа. Она вводит дескриптор файла, который будет применяться другими I/O функциями, поэтому он должен начинаться с setq. Например:
(setq a(open "file.ext" "r"))
<filename> - строка, определяющая имя и расширение открываемого файла. <mode> - пометка для чтения/написания. Он должен быть в виде строки, состоящей их единичных букв нижнего регистра. Действительные для mode буквы описаны в следующей таблице:
ОPEN mode |
Описание |
"r" |
Открыт для чтения. Если <filenane> не существует, вводится ноль |
"w" |
Открыт для написания. Если <filename> не существует, создается и открывается новый файл. Если <filename> существует, его существующие данные перепишутся. |
"a" |
Открыт для дополнений. Если <filename> не существует, создается и открывается новый файл. Если <filename> уже существует, он открывается и дополняется позиция в конце существующих данных, так любые новые данные, записанные в файл, будут добавлены к существующим данным. |
В системах DOS, некоторые программы и текстовые редакторы записывают файлы текста с маркером конец-файла (CTRL Z, десятичный ASCII код 26) в конце текста. При прочтении текстового файла DOS вводит статус конец-файла, если имеется маркер CTRL Z , даже если после него имеются еще данные. Если вы намерены применять "a" режим функции OPEN для дополнения данных в файл созданный другой программой, проверьте, чтобы другая программа не использовала маркер CTRL Z в конце своих текстовых файлов.
Представьте, что в данных примерах имен файлов не существует:
(setq f(open "new.tst" "w")) вводит <File # nnn>
(setq f(open "nouch.fil" "r")) вводит nil
(setq f(open "logfile" "a")) вводит <File # nnn>
<filename> может содержать прямой префикс, как в "test/func3" В системах MS-DOS также допускается управляющая буква; вы можете использовать обратную косую черту вместо прямой черты (но помните, что вы должны применять "\\" для получения в строке одной косой черты). Например:
(setq f(open "/x/new.tst" "w") вводит <File # nnn>
(setq f(open nosuch.fil" "r") вводит nil
4.84.(or <expr> )
Эта функция вводит логическое OR/ИЛИ для списка выражений. Если все выражения вычисляются к нулю ИЛИ вводит ноль, в противном случае вводит Т. Например:
(or nil 'a '()) вводит T
(or nil '()) вводит nil
4.85.(osnap <pt><mode-string>)
Эта функция вводит точку, которая является результатом применения режимов фиксации (snap) объекта, описанного <mode-string> к точке <pt>. <mode-string> - строка, состоящая из одного или более действительных зафиксированных объектов, определенные как "midpoint", "center" и т.д., отделенные запятыми. Например:
(setq pt2 (osnap pt1 "midp"))
(setq pt2 (osnap pt1 "midp,endp,center")
Если параметр <pt> -точка 2D (список из двух действительных чисел), вводится точка 2D. Если параметр <pt> точка 3D (список из трех действительных чисел), вводится точка 3D. Если в оснапе не находится точки, определенной <mode>/режимом, для заданной точки <pt>, вводится ноль.
4.86. pi
Это не функция, а константа pi. Она вычисляется приблизительно 3,1415926.
4.87.(polar <pt><angle><distance>)
Эта функция вводит точку под углом <angle> на расстоянии <distance> от точки <pt>. Точка - список из двух действительных чисел, угол выражен в радианах. Например:
(polar '(1.0 1.0) 0.785398 1.414214)
вводит (2.000000 2.000000)
4.88. (prin1<expr>[<file-desc>])
Эта функция печатает выражение <expr> на экране и вводит <expr>. <expr> могут быть любые выражения, но они не должны быть строкой. Если присутствует <file-desc> (и если это дескриптор для файла,открытого для написания), <выражение> в файле точно так, как оно должно появиться на экране. Печатаются только заданные <выражения>, новые линии или пробелы не включаются. Например, заданы следующие назначения:
(setq a 123)
(setq b '(a))
тогда
(prin1 'a) печатает A и вводит A
(prin1 a) печатает 123 и вводит 123
(prin1 b) печатает (A) и вводит (A)
(prin1 "Hello") печатает "Hello" и вводит "Hello"
Каждый из примеров печатается на экране, как только определяется <дескриптор файла>. Представьте, что F - действительный дескриптор файла, открытого для написания:
(prin1 "Hello" f)
напишет "Hello" в заданный файл и введет "Hello".
Если <expr> - строка, содержащая контрольные символы, PRIN1 отредактирует эти символы кавычками " ".
\e для escape переход
\n для newline новая линия
\r для return возврат,ввод
\t для tab табуляция
\nnn для символов,чей восьмиричный код nnn
Таким образом:
(prin1 (chr 2)) печатает "\002" и вводит "\002"
(prin1 (chr 10)) печатает "\n" и вводит "\n"
4.89.(princ <expr>[<file-desc>])
Эта функция такая же, как PRIN1, кроме того, что контрольные символы в <expr> печатаются без расширения. В общем, PRIN1 разработан для написания выражений в таком виде, чтобы они были совместимы с функцией LOAD , в то время как PRINC будет печатать их в пригодном для чтения функцией READ-LINE виде.
4.90. (print <expr>[<file-desc>])
Эта функция такая же, как PRIN1, кроме того, что новые линии печатаются перед <expr>, а в промежутке печатается следующее выражение.
4.91. (progn <expr> .)
Эта функция последовательно вычисляет каждое <выражение> и вводит значение последнего выражения. Вы можете применять PROGN для вычисления нескольких выражений, где предусматривается только одно выражение. Например:
(if (=a b) (progn
(setq a (+a 10)
(setq b (-b 10)
)
Функция IF нормально вычисляет одно выражение "then", если тестовое выражение вычисляется к чему-либо отличному от нуля. В этом примере мы применяли PROGN для вычисления двух выражений вместо первоначального.