Информационный портал Media Systems & Bear Corp.

Главная Новости Delphi C&C++ Tеория Графов Web-Design Математика Исходники и Проекты Лисп и Пролог Ссылки

Портал :: Программирование на Лиспе :: Лабораторные работы
Лабораторная работа № 3( Скачать архив )  

Конструирующая рекурсия.

Задание 11: Сформировать список простых множителей заданного числа. Запускать (LMul ...).

(defun Simple( M TList)
(cond ((Null TList) T)
((= 0 (rem M (car TList))) Nil)
(T (Simple M (cdr TList)))
)
)

(defun RunLMul (N M Temp)
(if (= 2 M) (Setq Temp Nil) (SetQ Temp (RunLMul N (- M 1))))
(cond ((and (= 0 (rem N M)) (Simple M Temp)) (cons M Temp ) )
(T Temp)
)
)

(defun LMul (N)
(cond ((or (not (IntegerP N))(not ( PlusP N))) 'non-integer)
((= N 1) Nil)
(T (RunLMul N N))
)
)
(rds)

-----------------------------------------------------------------

Задание 12: Реверсировать элементы списка произвольной структуры на всех уровнях. Запускать (RevL ...).

(defun GoRev (L)
(cond ((Null L) Nil)
( (ListP (car l)) (cons (RunRevL (car L)) (GoRev (cdr L))) )
( T (cons (car L) (GoRev (cdr L))) )
)
)

(defun RunRevL (L)
(setq l(GoRev L))
(setq l (reverse L))
)


(defun RevL (L)
(cond ((Not (ListP L)) 'non-list)
((Null L) 'nil)
(T (RunRevL L))
)
)

(RDS)

-----------------------------------------------------------------

Задание 13: Линеаризовать список произвольной структуры. Запускать (LinL ...).

(defun RunLinL (L)
(cond ( (Null L) nil)
( (ListP (car L)) (append (RunLinL (car l)) (RunLinL (cdr L))))
( T (cons (car l) (RunLinL (cdr L))))
)
)

(defun LinL (L)
(cond ( (not(ListP L)) 'non-list )
( (Null L) nil)
( T (RunLinL L))
)
)

----------------------------------------------------------------

Задание 14: Сформировать список, являющийся пересечением двух заданных линейных списков. Повторяющиеся в исзодных списках элементы должны входить в итоговый список не более одного раза. Запускать (Cross ....).

(defun RunCross (L M Temp)
(cond ((Null M) Temp)
( (and (Member (car M) L)
(not (Member (car M) Temp))
)
(setq Temp (cons (car M) Temp))
(setq Temp (RunCross L (cdr M) Temp))
)
(T (setq Temp (RunCross L (cdr M) Temp)))
)
)

(defun Cross (L M)
(cond ((Not (ListP L)) 'non-list-1 )
((Not (ListP M)) 'non-list-2 )
((Null L) nil)
((Null M) nil)
(T (RunCross L M))
)
)

-------------------------------------------------------------------

Задание 15: Сформировать список чисел ряда Фибоначчи от первого числа до числа с заданным номерои включительно. Запускать (FiboL ....).

(defun RunFiboL (M N prev temp)
(setq temp (+ (car prev) (cdr prev)))
(if (< M N) (cons temp
(RunFiboL (+ M 1)
N
(cons temp (car prev))
)
)
(list temp)
)

)

(defun FiboL (N)
(cond ((not (numberp n)) 'non-number!!)
((<= n 0) 'non-positive!!)
((eq n 1) '(1))
((eq n 2) '(1 2))
(T (cons 1 (cons 2 (RunFiboL 3 N '(2 . 1) ))))
)
)

(rds)

©Bear Labs, Inc. 2001, All Rights Reserved.

 
   
  Гостевая книга . Связь с разработчиками: Bear Corporation, Media Studio.  
  Это место для вашей рекламы  

Дизайн: Bear Corner, Inc. & Media Sudio.
Последнее обновление: 24.03.2001.

Rambler's Top100 Rambler's Top100
Hosted by uCoz