LABS1D (ЛИСП), страница 6

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

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

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

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

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

(strcat ...)

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

(strcat "a" "bout") возвращает "about"

(strcat "a" "b" "c") возвращает "abc"

(strcat "a" "" "c") возвращает "ac"

(strlen )

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

(stalen "abcd") возвращает 4

(stalen "ab") возвращает 2

(stalen "") возвращает 0

(subst )

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

(setq sample '(a b (c d) b))

тогда:

(subst 'qq 'b sample) возвращает (A QQ (C D) QQ)

(subst 'qq 'z sample) возвращает (A B (C D) B)

(subst 'qq '(c d) sample) возвращает (A B QQ B)

(subst '(qq 'rr) '(c d) sample) возвращает (A B (QQ RR) B)

(subst '(qq 'rr) 'z sample) возвращает (A B (C D) B)

В сочетании с функцией ASSOC, SUBST обеспечивает удобный способ замены величины, найденной по ключу в структурированном списке. Например, дано:

(stq who '((ferst john) (mid q) (last public)))

тогда:

(setq old (assoc 'first who)) возвращает (FIRST JOHN)

(setq new '(first j)) возвращает (FIRST J)

(setq new old who) возвращает ((FIRST J) (MID Q) (LAST PUBLIC))

(type )

Эта функция возвращает TYPE (тип) , где TYPE - одно из следующих значений (как атом):

REAL числа с плавающей запятой

STR строковые константы

INT целые величины

SYM символы

LIST списки (и функции пользователя)

3. Расширение библиотеки функций dlisp.

Основные принципы программирования на dlisp те же, что и в MuLisp, при этом сохраняется и синтаксис MuLispа.

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

Пример расширения библиотеки функций dlispа содержится в файле rash.lsp. Для его запуска необходимо выполнить следующую последовательность команд:

MuLisp87.com Common.lsp

(load rash.lsp)

;File rash.lsp

;(Приложение к учебной версии языка Лисп dlisp).

;Содержит функции, расширяющие библиотеку dlisp Лиспа.

;Функция APPEND1 соединяет два списка в один

(defun append1 (l p)

(if (null l) p ;L пуст - вернуть P (условие окончания),

(cons (car l) ;иначе - создать список,

(append1 (cdr l) p)))) ;используя рекурсию.

;EQUAL1 - логическая идентичность объектов (параллельная рекурсия)

(defun equal1 (u v)

(cond ((null u) (null v)) ;возвращает T если U и V пустые

((numberp u) (if (numberp v) (= u v) ; проверка

nil)) ;на идентичность

((numberp v) nil) ; чисел

((atom u) (if (atom v) (eq u v) ;сравнение атомов

nil))

((atom v) nil)

(t (and (equal1 (car u) (car v)) ; идентичность "голов"

(equal1 (cdr u) (cdr v)))))) ;идентичность "хвостов"

;DELETE1 - удаляет элемент X из списка L

(defun delete1 (x l)

(cond ((null l) nil)

((equal1 (car l) x) (delete1 x (cdr l)))

(t (cons (car l) (delete1 x (cdr l)))))) ;ветвь выполняется

;в случае невыполнения предыдущих.

;FULLENGTH1 - определяет полную длину списка L (на всех уровнях)

(defun fullength1 (l)

(cond ((null l) 0) ;для пустого списка возвращается 0

((atom l) 1) ;если L является атомом - возвращается 1

(t (+ (fullength1 (car l)) ;подсчет в глубину

(fullength1 (cdr l)))))) ;подсчет в ширину

;DELETELIST1 - удаляет все элементы, входящие в список U из списка V

(defun deletelist1 (u v)

(cond ((null u) v)

(t (delete1 (car u)

(deletelist1 (cdr u) v)))))

;MEMBER1 - проверяет вхождение элемента U в список V на верхнем уровне

(defun member1 (u v)

(cond ((null v) nil)

((equal1 u (car v)) v)

(t (member1 u (cdr v)))))

;В случае присутствия S-выражения U в списке V функция возвращает остаток списка V, начинающийся с U, в противном случае результатом вычисления является NIL.

;INTERSECTION1 - вычисляет список общих элементов двух списков

(defun intersection1 (u v)

(cond ((null u) nil)

((member1 (car u) v);проверка на вхождение "головы" сп. U в сп. V

(cons (car u) (intersection1 (cdr u) v)));создание списка

(t (intersection1 (cdr u) v))));ненужные элементы отбрасываются

;UNION1 - объединяет два списка, но в отличие от APPEND1,

;в результирующий список не добавляются повторяющиеся элементы

(defun union1 (u v)

(cond ((null u) v)

((member1 (car u) v) ;отсеивание

(union1 (cdr u) v)) ; ненужных элементов

(t (cons (car u)

(union1 (cdr u) v)))))

;COPY-LIST1 - копирует верхний уровень списка

(defun copy-list1 (l)

(cond ((null l) nil)

(t (cons (car l)

(copy-list1 (cdr l))))))

;COPY_TREE1 - копирует списочную структуру

(defun copy-tree1 (l)

(cond ((null l) nil)

((atom l) l)

(t (cons (copy-tree1 (car l))

(copy-tree1 (cdr l))))))

;ADJOIN1 - добавляет элемент к списку

(defun adjoin1 (x l)

(cond ((null l) nil)

((atom l) (cons x ;если L атом, то он преобразуется в список,

(cons l nil))) ;а затем к нему добавляется X

(t (cons x l))))

;SET-DIFFERENCE1 - находит разность двух списков

(defun set-difference1 (w e)

(cond ((null w) nil)

((member1 (car w) e) ;отбрасываются ненужные

(set-difference1 (cdr w) e)) ;элементы

(t (cons (car w)

(set-difference1 (cdr w) e)))))

;COMPARE1 - сравнение с образцом

(defun compare1 (p d)

(cond ((and (null p) (null d)) t) ;исчерпались списки?

((or (null p) (null d)) nil) ;одинакова длина списков?

((or (equal1 (car p) '&) ;присутствует в образце атом &

(equal1 (car p) (car d))) ;или головы списков равны

(compare1 (cdr p) (cdr d))) ;& сопоставим с любым атомом

((equal1 (car p) '*) ;присутствует в образце атом *

(cond ((compare1 (cdr p) d)) ;* ни с чем не сопоставима

((compare1 (cdr p) (cdr d))) ;* сопоставима с одним атомом

((compare1 p (cdr d))))))) ;* сопоставима с несколькими

;атомами

;SUBSTITUTE1 - замена в списке L атома S на атом N

(defun substitute1 (n s l)

(cond ((null l) nil)

((atom (car l))

(cond ((equal1 s (car l))

(cons n (substitute1 n s (cdr l))))

(t (cons (car l) (substitute1 n s (cdr l))))))

(t (cons (substitute1 n s (car l))

(substitute1 n s (cdr l))))))

;DELETE-DUPLICATES1 - удаление повторяющихся элементов

(defun delete-duplicates1 (l)

(cond ((null l) nil)

((member1 (car l) (cdr l))

(delete-duplicates1 (cdr l)))

(t (cons (car l) (delete-duplicates1 (cdr l))))))

;ATOMLIST1 - проверка на одноуровневый список

(defun atomlist1 (l)

(cond ((null l) t)

((listp (car l)) nil)

(t (atomlist1 (cdr l)))))

;REVERSE1 - обращает верхний уровень списка

(DEFUN REVERSE1 (l)

(COND ((NULL l ) NIL)

(T (APPEND1 (REVERSE1 (CDR l))

(CONS (CAR l) NIL)))))

4. Задание к лабораторной работе.

Напишите функцию, аналог системной функции Лиспа:

1. а) (1+ ) Результат функции - , увеличенное на единицу.

в) (1- ) Результат функции - , уменьшенное на единицу.

2. а) (incf память приращение) Добавление приращения к числу в памяти.

в) (decf память приращение) Вычитание приращения из числа в памяти.

3. (expt ) Эта функция возвращает , возведенное в указанную . Если оба аргумента целые, то результат - целое число. В любом другом случае, результат - действительное число.

4. (gcd ) Функция возвращает наибольший общий делитель и . и должны быть целыми.

5. а) (first <список>), second, third, и т. д. возвращающие соответственно первый, второй, третий, и т. д. элемент списка.

в) (last ) Эта функция возвращает последний элемент списка. не должен быть равен nil. LAST возвращает либо атом либо список.

6. а) (max ...) Эта функция возвращает наибольшее из заданных чисел.

в) (min <число> <число> ...) Эта функция возвращает наименьшее из заданных чисел.

7. а) (evenp <число>) Проверяет, четное ли число. Она возвращает T - если число четное и NIL - в противном случае.

в) (oddrp <число>) Эта функция - противоположная по действию функции evenp.

8. которая сортирует числа:

а) по возрастанию.

в) по убыванию.

9. предикат - который определяет:

а) числа с плавающей запятой.

в) целые числа.

г) строковые константы.

д) символы.

е) списки.

10. зависящую от одного аргумента, которая генерирует все циклические перестановки списка.

11. зависящую от одного элемента, которая по данному списку вычисляет список его элементов:

а) встречающихся в нем более 1, 2, ... раз.

в) встречающихся в нем не менее 2, 3, ... раз.

  1. S. Запишите все функции, написанные вами, в один файл. Для отладки программы используйте встроенные средства dlispа.

5. Вопросы.

1. Какие способы тестирования программ предусмотрены в dlisp?

2. В чем их различия?

3. Какие функции предусмотрены для работы со строковыми константами в dlisp?

4. Назовите их основные особенности?

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