Скачиваний:
9
Добавлен:
01.05.2014
Размер:
104.96 Кб
Скачать

Лабораторная работа №4

«Освоение начальных навыков программирования на языке Лисп и создание собственных функций»

Цель работы: приобретение начальных навыков программирования на языке muLisp, освоение технологии работы с интерпретатором и правил отладки программ.

Задание к работе: написать программу, формирующую все подмножества заданного множества.

Выполнение работы:

Описание функций:

number (list) – определяет количество элементов в списке list.

pow (x n) – выполняет возведение числа x в степень n

generate (list1 list2) – строит список из элементов списка list1 следующим образом: если в соответствующей позиции списка list2 стоит 1, то соответствующий элемент из списка list1 добавляется к результату.

binary (k) – переводит число k в двоичную систему счисления и возвращает в качестве результата список двоичного кода числа.

dopoln (k n) – дополняет список из k элементов нулями до n элементов.

generator (lst) – организует генерацию всех подмножеств заданного множества для множества, представленного списком lst. Возвращает в качестве результата список всех подмножеств заданного множества.

Листинг программы:

; определение количества элементов множества

(defun number (list)

(setq reslt 0)

(loop

((null list) reslt)

(setq list (cdr list))

(setq reslt (+ 1 reslt))

)

)

; вычисление значения 2^n, n - количество элементов множества

(defun pow (x n)

(setq reslt 1)

( loop

((zerop n) reslt)

(setq reslt (* x reslt))

(setq n ( - n 1))

)

)

; генерация подмножества заданного множества по двоичному коду

(defun generate (list1 list2)

(setq i 0)

(setq n (number list1))

(setq rez nil)

(loop

((eql i n) rez)

(setq elem (nth i list2))

(setq elem1 (nth i list1))

(setq rez1 nil)

(setq rez1 (cons elem1 rez1))

(if (eql elem 1) (setq rez (append rez rez1 )) (setq rez rez))

(setq i (+ i 1))

)

)

; перевод текущего значения в двоичный код и возвращение списка двоичного кода

(defun binary (k)

(setq list nil)

(loop

(setq elem (rem k 2))

(setq list (cons elem list))

((eql k 1) list)

((eql k 0) list)

(setq k (truncate k 2))

)

)

; дополнение списка двоичного кода нулями

(defun dopoln (k n)

(setq list (binary k))

(setq count (number list))

(loop

((eql n count) list)

(setq list (cons 0 list))

(setq count (+ count 1))

)

)

; функция организации вычисления подмножеств заданного множества

(defun generator (lst)

(print " ")

(print "Программа генерации всех подмножеств заданного множества ")

(print " ")

(setq count (number lst))

(setq col (pow 2 count))

(setq rez nil)

(setq rezult nil)

(setq j 0)

(loop

((eql j col) rezult)

(setq list1 (dopoln j count))

(setq rez (generate lst list1))

(setq rezult (cons rez rezult))

(print rez)

(setq j ( + j 1 ))

)

)

Работа программы:

Для начала работы программы необходимо вызвать функцию generator и передать ей в качестве параметра множество, для которого будут сгенерированы все подмножества:

При нажатии кнопки Enter начинается работа программы и печатаются все подмножества заданного множества:

где NIL – это пустое подмножество заданного множества.

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

4

Соседние файлы в папке Лабораторные работы на muLisp