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

2016-07-31СтудИзба

Описание файла

Документ из архива "АвтоЛИСП - реализация языка программирования", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "LISP1"

Текст 4 страницы из документа "LISP1"

закроет предполагаемый файл и введет ноль.

4.33 (command ...)

Эта функция выполняет команду АвтоКАДа в пределах АвтоЛИСПа и всегда вводит ноль. Параметры, представляющие команды АвтоКАДа, и их подкоманды, каждый параметр высчитывается в АвтоКАД в качестве ответа на последующие подсказки. Имена команд и опции запускаются в виде строчек, точки 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) не могут применяться внутри функции. Попытка проделать это, приведет в результате к появлению сообщения:

"ошибка:забракованная АвтоКАДом функция" и выполнение функции прекращается. Если ввод пользователя необходим, заранее задайте функции GETxxx, как указано выше, или поместите их между удачными вызовами функции COMMAND.

Если команда АвтоКАДа выполняется и строка,состоящая из единичного мертвого хода ("/"), просчитывается как один из параметров функции COMMAND, эта функция приостановит прямой ввод пользователя (или смещение). Это идентично механизму паузы мертвого хода, которым снабжены меню. Однако, поскольку мертвый ход является специальным контрольным знаком в ЛИСПе, требуется два символа мертвого хода для того, чтобы получить один в текстовой строке.

Если вы выдаете промежуточные команды в то время, когда функция COMMAND приостановлена, она и остается приостановленной. Тем не менее, вы можете выполнять команду ZOOM или PAN во время паузы функции COMMAND. Пауза сохраняется до тех пор, пока АвтоКАД получает действительный ввод и в работе нет никаких промежуточных команд.

Например:

(command "circle" "5,5" "r" "\\" "line" "5,5" "7,5" "")

начинает команду CIRCLE, устанавливает центральную точку 5,5 и затем-пауза, позволяющая смещать радиус окружности на экране. Когда вы укажете необходимые точки (или напечатаете необходимый радиус), функция продолжает работу, рисуя линию от 5,5 до 7,5.

Меню ввода не отменяется паузой АвтоЛИСПа. Если элемент меню активен когда функция COMMAND находится в паузе для ввода, это требование ввода может быть удовлетворено при помощи меню. Если вы хотите отменить и элементы меню, вы должны ввести мертвый ход в элемент меню. Когда обнаружен действительный ввод, будут продолжаться как функция COMMAND, так и элемент меню.

4.34 (cond ( ...)

Эта функция принимает в качестве параметров любое количество списков. Она вычисляет первый элемент каждого списка (в установленной последовательности) пока один из этих элементов введет значение, отличное от нуля. Затем она вычисляет те выражения, которые следуют за тестом, и вводит значение последнего выражения в подсписке. Если в подсписке только одно выражение (например, пропущен ),вводится значение выражения . COND - исходная условная функция в АвтоЛИСПе.

Например,в этом случае COND используется для выполнения расчетов абсолютного значения:

(cond (minusp a) (-a))

(t a)

)

Если для "а" было установлено значение -10, будет введено 10. Как показано, COND может применяться как функция типа "case". Общепринято использовать T как последнее (по умолчанию) выражение. Далее, другой пример. Задана ответная строка пользователя в виде символа "s", эта функция проверяет ответ и вводит 1, если он "Y" или "y" и 0, если он "N" или "n", в остальных случаях -nil (нуль).

(cond (( = s "Y") 1)

(( = s "y") 1)

(( = s "N") 0)

(( = s "n") 0)

( t nil)

)

4.35 (cons )

Это основной список КОНСтруктора. Он берет элемент () и список (), и вводит дополнение этого элемента в начало списка. Например:

(cons 'a '(b c d)) вводит (A B C D)

(cons '(a) '(b c d)) вводит ((A) B C D)

Обратите внимание, что первый элемент может быть атомом в списке. CONS также допускает атом на место параметра в , создающего структуру, известную как dotted pair (точечная пара). Когда на экран выдается точечная пара, АвтоЛИСП печатает период или точку между первым и вторым элементом пары. Точечные пары занимают меньше места в памяти, чем обычные списки; функция CDR может применяться для ввода второго атома. Таким образом:

(cons 'a 'b) вводит ( A . B)

(car (cons 'a 'b)) вводит A

(cdr (cons 'a 'b)) вводит B

4.36 (cons )

Эта функция вводит косинус , где выражен в радианах. Например:

(cos 0.0 ) вводит 1.000000

(cos pi ) вводит -1.000000

4.37 (defun ...)

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

Если не объявляются ни параметры, ни локальные символы, после имени функции должны быть пустые круглые скобки. Например:

(defun myfunc (x y)...) (функция принимает 2 параметра)

(defun myfunc (/a b)...) (функция имеет 2 локальных символа)

(defun myfunc (x/temp)...) (один параметр и один локальный символ)

(defun myfunc ()...) (нет параметров и локальных символов)

Следующие за списком параметров и локальных символов одно или несколько выражений вычисляются при выполнении функции.

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

(defun add (x y)

(+ x y)

)

(add 10 5) вводит 15

(add -7 . 4) вводит 2,60000

и

(defun dots ( x y/temp)

(setq temp (strcat x "..."))

(strcat temp y)

)

(dots "a" "b" ) вводит "а...b"

(dots "from" "to") вводит "from...to"

Никогда не применяйте имя встроенной функции или символа в качестве , поскольку это сделает встроенную функцию недоступной.

4.37.1. Функции библиотек и автоматическая загрузка

Определения функций могут храниться в файле и загружаться при помощи функции LOAD АвтоЛИСПа (эта функция описана дальше в этой главе). Если существует файл "acad.lsp", АвтоЛИСП будет загружать его автоматически каждый раз при введении графического редактора АвтоКАДа; вы можете применять эту функцию для создания библиотеки полезных функций и для создания гарантии присутствия этой библиотеки.

4.37.2. Функции С:ххх - дополнение команд АвтоКАДа

Вы можете ввести дополнительные команды в АвтоКАД, применяя функцию DEFUN для определения функций, вводящих в работу эти команды. Для того, чтобы применяться как команды АвтоКАДа, эти функции должны придерживаться следующих правил:

1. Функция должна иметь имя следующей формы: "С:ХХХ", где все буквы - верхнего регистра. Часть имени "С" должна присутствовать всегда, часть "ХХХ" может быть именем команды по вашему выбору, при условии, что она не дублирует никаких команд АвтоКАДа, встроенных или внешних.

2. Функция должна быть определена с нулевым списком параметров (но локальные символы могут присутствовать).

Например, функция: нарисовать квадрат при помощи Полилиний определяет следующее:

(defun C:PSQUARE ('pt1 pt2 pt3 pt4 len)

(setq pt1 (getpoint "Lower left corner:"))

(setq len (getdist pt1 "Length of one side:"))

(setq pt2 (polar pt1 0.0 len))

(setq pt3 (polar pt2 ('PI 2.0) len))

(setq pt4 (polar pt3 PI len))

(Command "PLINE" pt1 pt2 pt3 pt4 "C")

)

Функции, определенные таким образом, могут быть вызваны просто введением части "ХХХ" имени функции, при появлении подсказки АвтоКАДа "Command:". Если "ХХХ" - неизвестная команда, АвтоКАД попытается вызвать функцию АвтоЛИСПа "С:ХХХ" без параметров. Например, при функции C:PSQUARE диалог будет следующим:

Сommand: PSQUARE

Lower left corner: (enter a point)

Нижний левый угол: (введите точку)

Length of one side: (enter a distance)

Длина стороны: (введите размер)

Затем функция вызовет команду АвтоКАДа PLINE и введет в ее подсказки: нарисовать желаемый квадрат. Добавление таким образом команды в АвтоКАД - очень мощное свойство АвтоЛИСПа. Однажды определенная, новая команда может использовать все свойства, предоставляемые АвтоЛИСПом. Фактическое применение новой команды не требует окружения имени команды параметрами, так что эта введенная АвтоЛИСПом команда, применяется также, как и любая другая команда АвтоКАДа.

4.38.(distance )

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

Например:

(distance '(1.0 2.5) '(7.7 2.5)) вводит 6.700000

(distance '(1.0 2.5) '(3.0 4.0)) вводит 2.828427

4.39. (eq )

Эта функция определяет, идентичны ли и , то есть, они фактически граничат с одним и тем же объектом (например,SETQ). EQ вводит T, если два выражения идентичны, в противном случае вводится ноль. Обычно она применяется для определения фактической идентичности двух списков. Например, даны следующие назначения:

(setq f1 '(a b c))

(setq f2 '(a b c))

(setq f3 f2)

тогда:

(eq f1 f2) вводит ноль (f1 и f2 - не один и тот же список!)

(eq f3 f2) вводит T (f3 и f2 - абсолютно одинаковые списки!)

См. также функцию EQUAL.

4.40 (equal )

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

(setq f1 '(a b c))

(setq f2 '(a b c))

(setq f3 f2)

тогда:

(equal f1 f2) вводит T (f1 и f2 вычисляются к одному и тому же)

(equal f3 f2) вводит Т (f2 и f3 абсолютно одинаковые списки)

Обратите внимание, что в то время, как два списка равны, они могут быть неидентичны, атомы, когда они равны, они всегда идентичны. И, наконец, если любые два списка или атомы идентичны, они всегда равны.

4.41.(eval )

Вводит результат вычисленных (выражений), где - любое выражение ЛИСПа. Например, заданы назначения:

(setq a 123)

(setq b 'a)

тогда:

(eval 4.0) вводит 4.000000

(eval (abs - 10 )) вводит 10

(eval a) вводит 123

(eval b) вводит 123

4.42.(exp )

Эта функция вводит е, возведенное в степень (обычный антилогарифм (antilog)). Она вводит действительные числа. Например,

(exp 1.0) вводит 2.718282

(exp 2.2) вводит 9.025013

(exp -0.4) вводит 0.670320

4.43. (expt )

Эта функция вводит , возведенную в определенную . Если оба параметра целые числа, результат будет целым числом. В противном случае, результат будет действительным числом. Примеры:

(expt 2 4) вводит 16

(expt 3.0 2.0) вводит 9.000000

4.44. (fix )

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

(fix 3) вводит 3

(fix 3.7) вводит 3.000000

4.45.(float )

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

(float 3) вводит 3.000000

(float 3.7) вводит 3.700000

4.46.(foreach )

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

(foreach n'(a b c)(print n))

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

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
438
Средний доход
с одного платного файла
Обучение Подробнее