Ознакомительная работа в среде MuLisp

Автор работы: Пользователь скрыл имя, 19 Февраля 2011 в 15:30, лабораторная работа

Описание работы

Цель: Ознакомиться со средой MuLisp. Изучить базовые функции Лиспа, символы и их свойства, а также средства для работы с числами.



1.Основные положения программирования на Лиспе.
2.Загрузка системы, системный редактор.
3.Базовые функции языка. Символы, свойства символов.
4.Средства языка для работы с числами.
5.Задание к лабораторной работе.
6.Вопросы.

Файлы: 1 файл

labs1d.doc

— 151.50 Кб (Скачать файл)

       (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 <число1> <число2>) Функция  возвращает  наибольший  общий делитель <числа1> и <числа2>. <Число1> и <число2> должны быть целыми. 

       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. Назовите их основные особенности?

Информация о работе Ознакомительная работа в среде MuLisp