Смекни!
smekni.com

АвтоЛИСП - реализация языка программирования (стр. 8 из 10)

(logand 2 3 15) вводит 2

(logand 8 3 4) вводит 0

4.71.(logior <number><number>)

Эта функция вводит результат логического подразрядного включающего OR/ИЛИ списка <чисел>. <Числа> должны быть целыми, результат будет также целым числом. Например:

(logior 1 2 3) вводит 7

(logior 9 3) вводит 11

4.72.(lsh <num1><numbits>)

Эта функция вводит логическое подразрядное смещение <num1> битами <numbits>. <Число1> и <количество битов> должны быть целыми числами, результат также целое число. Если <количество битов> положительное число, <число1> смещается влево, если отрицательное - вправо. В обоих случаях "нулевые" биты смещаются внутрь, а биты, сдвигаемые наружу без сохранения выдвигаемых разрядов, не учитываются (shift in/shift out). Если "один" бит смещен внутрь или наружу (into/out) от вершины (16-ого ) бита целого числа, его знак меняется. Например:

(lsh 2 1) вводит 4

(lsh 2 -1) вводит 1

(lsh 40 2) вводит 160

(lsh 16384 1) вводит -32768

4.73.(mapcar <function><list1>...<listn>)

MAPCAR вводит результат выполненной <функции> с индивидуальными элементами <списка1> через <список n>, подаваемые как параметры <функции>. Количество <списков> должно соответствовать количеству параметров, требуемых <функцией>. Например:

(mapcar '1+'(10 20 30) вводит (11 21 31)

Это эквивалентно

(1 + 10)

(1 + 20)

(1 + 30)

Кроме этого MAPCAR вводит список результатов. Аналогично:

(mapcar '+'(10 20 30)'(4 3 2) вводит (14 23 32)

эквивалентно:

(+10 4)

(+20 3)

(+30 2)

Функция LAMBDA может определить "анонимную" функцию, которую выполнит MAPCAR. Это полезно, когда некоторые параметры функции - константы или подаются некоторыми другими путями. Например:

(mapcar '(lambda (x)(+ x 3))'(10 20 30) вводит (13 23 33)

и

(mapcar '(lambda (x y z)

(* x (-y z)

)

'(5 6)'(20 30)'(145.0)

) вводит (30 150.000000)

4.47.(max <number><number>...)

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

(max 4.07 -144) вводит 4.070000

(max -88 19 5 2) вводит 19

4.75.(member <expr><list>)

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

(member 'c '(a b c d e) вводит (C D E)

(member 'q '(a b c d e) вводит nil

4.76.(menucmd <string>)

Функция MENUCMD снабжает средствами программы для переключения между подстраницами в меню АвтоКАДа. Таким образом, программа ЛИСПа может работать во взаимодействии с объединенным файлом меню, каждый раз при необходимости ввода пользователя, выводя на экран соответствующие подменю варианты/альтернативы. Параметр <строка> функции MENUCMD имеет следующую форму:

section - submenu (секция - подменю)

где

section определяет секцию/раздел меню. Действительны следующие имена:

S - для меню экрана (SCREEN)

B - для клавишного меню (BUTTONS)

T1-T4 - для меню планшета (TABLET) от 1 до 4

A1 - для AUXI меню.

submenu определяет какое из подменю активно. Имя должно быть или одним из знаков/обозначений меню (без "**") в текущем загруженном файле меню, или именем секции основного меню. Для дальнейшей информации см. Главу 5. Обратите внимание, что начальная "S", применяемая для ссылки на подменю в файле меню, здесь не применяется. Например:

(menucmd "S = OSNAP")

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

(menucmd "B" = "MY-BUTTONS")

определит "MY-BUTTONS" для кнопочного меню. MENUCMD всегда вводит nil.

4.77.(min <number><number>...)

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

(min 683 -10.0) вводит -10.000000

(min 73 2 48 5) вводит 2

4.78.(minusp <item>)

Эта функция вводит T, если <item> - действительное или целое число и вычисляется к отрицательному значению, иначе она вводит nil. Для других типов <item> функция не определяется. Например:

(minusp -1) вводит T

(minusp -4.293) вводит T

(minusp 830.2) вводит nil

4.79.(not <item>)

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

(setq a 123)

(setq b "string")

(setq c nil)

тогда:

(not a) вводит nil

(not b) вводит nil

(not c) вводит T

(not '()) вводит T

4.80.(nth <n><list>)

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

(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 <item>)

Эта функция вводит Т, если <item> близок к нулю, иначе она введет nil. Например, заданы следующие назначения:

(setq a 123)

(setq b "string")

(setq c nil)

тогда:

(nul a) вводит nil

(nul b) вводит nil

(nul c) вводит T

(nul '()) вводит T

4.82.(numberp <item>)

Эта функция вводит T, если <item> - целое или действительное число, иначе она вводит ноль. Например, заданы назначения:

(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 <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 также допускается управляющая буква; вы можете использовать обратную косую черту вместо прямой черты (но помните, что вы должны применять "&bsol;" для получения в строке одной косой черты). Например:

(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 отредактирует эти символы кавычками " ".

&bsol;e для escape переход

&bsol;n для newline новая линия