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

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

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

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

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

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

(Конечная точка дорожки: конечная точка)

Half point of path: number

(Половина ширины дорожки: число)

Radius of tiles: number

(Радиус плит: число)

Spacing between tiles: number

(Расстояние между плитами: число)

где начальная и конечная точки определяют центральную линию дорожки. Определяется половина ширины дорожки и вводится радиус круглых плит. Наконец, определяется расстояние между плитами. Половину ширины дорожки мы определяем раньше, чем полную ее ширину потому, что это позволяет более четко определить отрезок типа "резиновая нить" от начальной точки.

3.3 Начало

Мы до конца разовьем эту прикладную задачу (по восходящей). В этой задаче мы будем применять жесткое задание углов.

АвтоЛИСП, как и многие другие языки программирования, определяет углы в радианах. Радианы измеряют углы от 0 до 2'PL. Так как большинство измеряет углы в градусах, мы определим функцию, которая преобразовывает градусы в радианы. Используя ваш редактор текста, создайте файл GP.LSP. Введите следующую программу:

: Convert angle in degree to radians

(defun dtr (a)

(*pi (/a 180.0))

)

Давайте рассмотрим, что это даст. Мы определили функцию, применив в АвтоЛИСПе функцию DEFUN. Функция называется DТR (сокращение от "degrees to radians" ("градусы в радианы")).

Она содержит один параметр "а" - угол в градусах. В результате - выражение:

PI * (a / 180.0)

которое в примечаниях ЛИСПа расшифровывается как: "произведение от PI, умноженное на коэффициент А, разделенное на 180 градусов". PI предопределяется ЛИСПом как 3.1459...; строчка, начинающаяся с двоеточия,- комментарий - АвтоЛИСП игнорирует текст, расположенный после двоеточия.

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

Когда появится подсказка АвтоКАДа "Command:", загрузите функцию, введя:

Command: (load "gp")

АвтоЛИСП загрузит вашу функцию, отражая ее имя в "DТR". Далее в этом руководстве, когда мы говорим : "Введите АвтоКАД и загрузите программу", будет подразумеваться проделанная только что последовательность.

Сейчас мы проверим функцию, выполняя различные действия. Из определения радианы, 0 градусов должно соответствовать нулевой радиане; введите в АвтоКАД строчку:

Command: (dtr 0)

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

0.000000

Теперь давайте попробуем 180 градусов. Если вы введете

Command: (dtr 180)

вы получите ответ:

3.141593

Это показывает, что 180 градусов равно PI радианам. Если вы исследуете функцию, вы убедитесь, что это именно так.

Для выхода из АвтоКАДа введите:

Command: QUIT

и на подсказку

Really want to discard all changes to drawing? Y

(Действительно хотите не учитывать все изменения в чертеже? Д)

ответьте

0

в основном меню для возврата к DOS подсказке. Далее в руководстве под "Выйти из АвтоКАДа" будет подразумеваться эта процедура.

3.4 Ввод

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

Используя редактор текста, добавьте следующие строчки в GP.LSP (мы будем применять вертикальную черту для выделения добавляемых строчек).

: Convert angle in degrees to radians

(defun dtr (a)

('pi (/ a 180.0))

)

| :Acquire information for garden path

| (defun gpuser ()

| (setq sp (getpoint "\nStart point of path:"))

| (setq ep (getpoint "\nEnd point of path:"))

| (setq hwidth (getdist "\nHalf width of path:"sp))

| (setq trad (getdist "\nRadius of tiles:"sp))

| (setq pangle (angle sp ep ))

| (setq plength (distance sp ep ))

| (setq width (' 2 hwidth))

| (setq angp90 (+pangle (dtr 90))) : Path angle +90 deg

| (setq angm90 (-pangle (dtr 90))) : Path angle -90 deg

Необязательно смещать выражения, содержащие ваши функции. Фактически вы можете ввести всю программу в одну строку. Однако, смещение и прерывание строчки служит созданию более понятной и четкой для чтения структуры программы. Также, расположение начальных и конечных круглых скобок основных выражений на одной оси, способствует уверенности, что ваши скобки верно сбалансированы.

Итак, мы определили функцию GPUSER. Она не принимает параметров, а спрашивает пользователя по всем пунктам. Функция SETQ приводит переменную АвтоЛИСПа к определенному значению. Первая SETQ приводит переменную SP (начальная точка ) к результату функции GETPOINT. Пользователь задает точки для функции GETPOINT. Для получения точки будет применяться строка, определяющая подсказку АвтоКАДа. "\n" заставляет подсказку появиться на новой линии. Мы применяем функцию GETPOINT для получения значения середины ширины дорожки, радиуса плиты и расстояния между плитами. Второй параметр функции GETPOINT , SP, определяет "базовую точку" расстояния. Расстояние можно создать, определив в АвтоКАДе точку, соответствующую начальной точке дорожки, и присоединив к ней линию резиновой нити.

После ввода высчитываются наиболее часто применяемые переменные. PANGLE обозначает угол от начальной до конечной точки дорожки. Функция ANGLE вводит этот угол по заданным двум точкам. PLENGTH вводит длину дорожки. Функция DISTANCE рассчитывает расстояние, заданное двумя точками. Задав половину ширины дорожки, мы рассчитываем общую ширину, умножив на два заданную величину. И, наконец, мы рассчитываем и сохраняем угол дорожки плюс-минус 90 градусов в переменных ANGP90 и ANGM90 соответственно (т.к. углы в АвтоЛИСПе рассчитываются в радианах, мы перед этими рассчетами применили функцию DTR для перевода градусов в радианы).

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

Приведите в действие функцию, напечатав:

Command: (gpuser)

Ответьте на подсказки следующим образом:

Начальная точка дорожки: 2,2

Конечная точка дорожки: 9,8

Половина ширины дорожки: 2

Радиус плиты: .2

Расстояние между плитами: .1

GPUSER использует ваши ответы для подсчета необходимых ему дополнительных переменных и на экране появится результат последних подсчетов (в данном случае - 0,826169, значение ANGM90 в радианах). Вы можете разгрузить все переменные, установленные функцией GPUSER путем подстановки восклицательного знака (!) перед их именами. Это заставит АвтоКАД вычислить переменные и выдать результат на экран. Если вы введете следующие команды, вы получите следующие результаты:

Command: !sp

(2.000000 2.000000)

Command: !ep

(9.000000 8.000000)

Command: !hwidth

2.000000

Command: !width

4.000000

Command: !trad

0.200000

Command: !tspac

0.100000

Command: !pangle

0.708626

Command: !plength

9.219544

Command: !angp90

2.279423

Command: !angm90

-0.862169

Обратите внимание, что PANGLE, ANGP90 и ANGM90 представлены в радианах. После проверки этих значений, выйдите из АвтоКАДа и вернитесь в свой текстовый редактор в GP.LSP.

3.5 Добавление команд в АвтоКАД

Наконец, мы готовы объединить все составные части в команду АвтоКАДа. Если мы определим функцию с именем C:XXX на языке АвтоЛИСП, вводя ХХХ (предполагая,что ХХХ не является командой АвтоКАДа) мы активизируем функцию. Для завершенности ввода в работу нашей команды PATH, мы определяем функцию C:PATH, что дает возможность нам впоследствии после загрузки GP.LSP напечатать только PATH и наша команда garden path будет вычисляться.

Используйте ваш текстовый редактор для добавления указанной строчки в GP.LSP, затем запустите АвтоКАД и загрузите программу.

С добавлением функции C:PATH, мы добавили команду PATH в АвтоКАД. Вы можете проверить команду, осуществив следующий ввод:

Команда: PATH

Начальная точка дорожки: 2,2

Конечная точка дорожки: 9,8

Половина ширины дорожки: 2

Радиус плиты: .2

Расстояние между плитами: .1

3.6 Замораживание

Так как наша команда PATH выполняется, все команды, которые она представляет в АвтоКАД, будут передаваться в область команд/подсказок и все выбранные ею точки будут отмечаться на экране маленькими черточками (метками). Раз командная функция налажена, для появления вводных команд АвтоЛИСПа точно похожих на команды АвтоКАДа, этот ввод может быть отменен.

Применение функции GETVAR необходимо, чтобы получить текущие значения режимов АвтоКАДА BLIPMODE и CMDECHO. Они сохраняются через SETQ в SBLIP и SCMDE. Затем мы применяем функцию SETVAR для того, чтобы установить обе эти переменные АвтоКАДа в нулевое положение; этим делая недействительными метки и переданные команды. Обратите внимание, что мы установили эти переменные в нулевое положение после получения ввода от пользователя через GPUSER. Мы хотим, чтобы метки остались для подтверждения ввода пользователя.

После того, как мы закончили черчение дорожки, мы используем функцию SETVAR для восстановления первоначального значения этих переменных.

Сохраните файл, запустите АвтоКАД и попробуйте сейчас команду PATH. Испробуйте ее со всех сторон, определяя различные виды ввода как при помощи поинтера, так и клавиатуры.

3.7 Резюме

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

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

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

Глава 4

Функции АвтоЛИСПа

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

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

4.1 (+ ...)

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

Например:

(+1 2) вводит 3

(+1 2 3 4.5) вводит 10.500000

(+1 2 3 4.0) вводит 10.000000

4.2 (- ...)

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

Например:

(-50 40) вводит 10

(-50 40.0 2) вводит 8.000000

(-50 40.0 2.5) вводит 7.500000

(-8) вводит -8

4.3 (* ...)

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

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