АвтоЛИСП - реализация языка программированияРефераты >> Программирование и компьютеры >> АвтоЛИСП - реализация языка программирования
Каждый раз, когда начинается сеанс работы графического редактора АвтоКАДа, АвтоЛИСП загружает файл "acad.lsp", если он существует. Вы можете записать на этот файл определение или наиболее часто употребляемые команды, они будут вычисляться автоматически каждый раз, когда вы начнете редактировать чертеж.
4.69.(log <number>)
Эта функция вводит в виде действительного числа естественный log <числа>. Например:
(log 4.5) вводит 1.504077
(log 1.22) вводит 0.198850
4.70.(logand <number><number> .)
Эта функция вводит результат логического подразрядного AND/И списка <чисел>. <Числа> должны быть целыми, результат также будет целым числом. Например:
(logand 7 15 3) вводит 3
(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