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

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

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

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

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

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

Необходимая часть может быть написана заглавными буквами, а остальная - с применением нижнего регистра; или необходимая часть может быть повторена, отделенная от ключевого слова запятой. Второй способ предназначен для облегчения применения иностранных языков, где переключение регистров может быть затруднено или вообще невозможно. В каждом методе длина необходимой части - минимальная длина, которая должна точно соответствовать. (Для метода разделителя-запятой предполагается, что строка аббревиатуры - правильное подмножество начала ключевого слова).

Например: "LTYPE,LT" и "LType" - эквивалентные спецификации. Каждая означает, что вводы пользователя типа "LTYPE", "LTYP", "LTY" или "LT" применяемы, но "L"- недостаточно, а "LTSCALE" и "LTYPEX" не соответствуют.

Рассмотрим следующие, определенные пользователем функции

(defun getnum (ix)

(initget 1 "Pi Two-pi")

(setq x (getreal "Pi/Two-pi/:"))

(cond((eqx "Pi") pi)

((eq x "Two-pi")(*2.0 pi))

(T x)

)

)

Этот INITGET запрещает нулевой ввод и создает список из двух ключевых слов "Pi" и "TWO-Pi". Затем применяется GETREAL для получения целых чисел, издавая подсказку "Pi/Two-pi/:", результат перемещения в локальном символе Х.

Если пользователь вводит число, это число возвращается функцией GETNUM. Однако, если пользователь вводит ключевое слово "Pi" ( или просто "P"), функция GETPOINT возвращает ключевое слово "Pi". Функция COND обнаруживает это и, в данном случае, вводит значение Pi. Ключевое слово "Two-pi" обрабатывается аналогично. Созданные с помощью INITGET контрольные пометки и ключевые слова применяются только со следующим GETxxx вызовом, а затем автоматически отбрасываются. Это позволяет очистить специальный режим при необходимости вызова другой функции.

4.61.(inters [])

Функция INTERS исследует две линии и вводит точку их пересечения, или ноль, если они не пересекаются. и - конечные точки первой линии, а и - конечные точки второй линии. Если присутствует необязательный параметр и он равен нулю, линии считаются бесконечными по длине, INTERS вводит точку пересечения даже если она находится вне конца одной или обеих линий. Если параметр опущен или он - ноль, точка пересечения должна находиться на обеих линиях или INTERS введет ноль. Например, задано:

(setq a'(1.0 1.0) b'(9.0 9.0))

(setq c'(4.0 1.0) d'(4.0 2.0))

тогда:

(inters a b c d) введет nil

(inters a b c d T) введет nil

(inters a b c d nil)введет (4.000000 4.000000)

4.62.(itoa )

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

(itoa 33) вводит "33"

(itoa -17) вводит "-17"

4.63 (lambda ...)

LAMBDA определяет "анонимную" функцию. Обычно она применяется когда заголовок при определении новой функции не выравнен. Она также помещает функцию на то место, где она должна применяться. LAMBDA вводит значение последнего и часто применяется вместе с APPLY и/или MAPCAR для выполнения функции в списке. Например:

(apply '(lambda (x y z)

(* x (-y z)

)

'(5 20 14)

) вводит 30

или:

(mapcar '(lambda (x)

(setq counter (1 + counter))

(* x 5)

)

'(24 -6 10.2)

) вводит (10 20 -30 51.000000)

4.64.(last)

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

(last '(a b c d e)) вводит E

(last '(a b c (d e))) вводит (DE)

Как показано, LAST может вводить как атом, так и список. На первый взгляд может показаться,что LAST- отличный способ получения координаты Y точки. Пока это истинно для 2D точки (список из двух действительных чисел), LAST введет координату Z для 3D точки. Для того,чтобы ваша функция работала как следует, задавая точки 2D и 3D, мы советуем вам применять CADR для получения координаты Y и CADDR для получения координаты Z.

4.65.(length )

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

(length '(a b c d) вводит 4

(length '(a b (c d)) вводит 3

(length '()) вводит 0

4.66.(list ...)

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

(list 'a 'b 'c) вводит (A B C)

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

(list 3.9 6.7) вводит (3.90000 6.70000)

В АвтоЛИСПе эта функция часто применяется для определения переменных точек 2D и 3D (список из двух или трех действительных чисел).

4.67. (listp )

Эта функция вводит T, если - список, и nil в противном случае. Например:

(listp '(a b c)) вводит T

(listp 'a) вводит nil

(listp 4.343) вводит nil

4.68.(load )

Эта функция загружает файл выражений АвтоЛИСПа и вычисляет эти выражения. - строка, которая представляет имя файла без расширения (расширение ".lsp" допускается). может включать префикс с каталогом, как в "/function/test1" ("функция/тест 1"). В системах MS-DOS/PC-DOS также допускается имя накопителя (например, a: c:) и вы можете использовать мертвый ход вместо предшествующей косой черты (но помните, что вы должны применять "\\" для получения одной косой черты в строке).

Если операция удачна, LOAD вводит имя последней определенной в файле функции. Если операция дает сбой, LOAD введет имя файла в виде строки.

Например, предположим, что файл "/fred/test1.lsp" содержит DEFUN функции MY-FUNС, а файл "test2.lsp" не существует:

(load "/fred/test1") вводит MY-FUNC

(load "test2" вводит "test"

Функция LOAD не может быть вызвана внутри другой функции ЛИСПа. Она должна быть введена непосредственно с клавиатуры (или из меню, или файла сценария /script file/), пока не активна никакая другая функция ЛИСПа.

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

4.69.(log )

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

(log 4.5) вводит 1.504077

(log 1.22) вводит 0.198850

4.70.(logand ...)

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

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

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

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

4.71.(logior )

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

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

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

4.72.(lsh )

Эта функция вводит логическое подразрядное смещение битами . и должны быть целыми числами, результат также целое число. Если положительное число, смещается влево, если отрицательное - вправо. В обоих случаях "нулевые" биты смещаются внутрь, а биты, сдвигаемые наружу без сохранения выдвигаемых разрядов, не учитываются (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 ...)

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

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

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

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

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

4.75.(member )

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

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

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

4.76.(menucmd )

Функция 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 ...)

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

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

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

4.78.(minusp )

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

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

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

(minusp 830.2) вводит nil

4.79.(not )

Эта функция вводит 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 )

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

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

(setq a 123)

(setq b "string")

(setq c nil)

тогда:

(nul a) вводит nil

(nul b) вводит nil

(nul c) вводит T

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

4.82.(numberp )

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

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

Эта функция открывает файл для обращения к нему I/O функции АвтоЛИСПа. Она вводит дескриптор файла, который будет применяться другими I/O функциями, поэтому он должен начинаться с setq. Например:

(setq a(open "file.ext" "r"))

- строка, определяющая имя и расширение открываемого файла. - пометка для чтения/написания. Он должен быть в виде строки, состоящей их единичных букв нижнего регистра. Действительные для mode буквы описаны в следующей таблице:

ОPEN mode

Описание

"r"

Открыт для чтения. Если не существует, вводится ноль

"w"

Открыт для написания. Если не существует, создается и открывается новый файл. Если существует, его существующие данные перепишутся.

"a"

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

В системах DOS, некоторые программы и текстовые редакторы записывают файлы текста с маркером конец-файла (CTRL Z, десятичный ASCII код 26) в конце текста. При прочтении текстового файла DOS вводит статус конец-файла, если имеется маркер CTRL Z , даже если после него имеются еще данные. Если вы намерены применять "a" режим функции OPEN для дополнения данных в файл созданный другой программой, проверьте, чтобы другая программа не использовала маркер CTRL Z в конце своих текстовых файлов.

Представьте, что в данных примерах имен файлов не существует:

(setq f(open "new.tst" "w")) вводит

(setq f(open "nouch.fil" "r")) вводит nil

(setq f(open "logfile" "a")) вводит

может содержать прямой префикс, как в "test/func3" В системах MS-DOS также допускается управляющая буква; вы можете использовать обратную косую черту вместо прямой черты (но помните, что вы должны применять "\\" для получения в строке одной косой черты). Например:

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