Списки и подсписки. Ошибка в программе - Lisp
Формулировка задачи:
Подскажите пожалуйста, что надо добавить или изменить в коде, чтобы программа работала.
Задание:
Даны списки L1,L2,L3. Если L1 и L2 являются подсписками L3, то сформировать
новый список, удалив из L3 подсписки L1 и L2, в противном случае оставить L3 без изменения.
(defun prefix(X Y)
( (null X T)((null Y)nil) )
( cond( ( equal(car X)(car Y) )
( prefix(cdr X)(cdr Y) )
)
)
)
(defun subl(X Y)
(cond((null X) T)
((null Y)nil)
((prefix X Y) T)
((subl X (cdr Y)) T)
)
)
(defun delpref(X Y)
(cond ((null X) Y)
(T(delpref(cdr X)(cdr Y)))
)
)
(defun delsubl(X Y)
(cond((null X) Y)
((prefix X Y)(delpref X Y))
((subl X(cdr Y)(delsubl X(cdr Y))))
)
)Решение задачи: «Списки и подсписки. Ошибка в программе»
textual
Листинг программы
(defun prefix(X Y) (cond ((null X) T) ((null Y) nil) ((equal (car X) (car Y)) (prefix (cdr X) (cdr Y)) ) ) ) (defun delsubl (X Y) (cond ((null X) Y) ((prefix X Y) (delpref X Y)) ((subl X (cdr Y)) (cons (car Y) (delsubl X (cdr Y)))) ) ) (defun zadacha (L1 L2 L3) (cond ((and (subl L1 L3) (subl L2 L3)) (delsubl L1 (delsubl L2 L3))) (t L3) ) )