Написать рекурсивную функцию, удаляющую x (последнее вхождение) из списка l - Lisp
Формулировка задачи:
Прочитать из файла значение переменной x. Написать рекурсивную функцию, удаляющую x
(последнее вхождение) из списка l. Список задать при вызове функции.
(defun l1(l)
(reverse (cdr(reverse l)))
)
;переворачивает список, берет от полученного хвост, и полученный
;хвост переворачивает
(defun ud (l &key x)
(cond ((null l) l)
( (equal (car l) x)(cdr l))
( (no equal (car 1) x) (cdr 1))
(t (cons (ud (l)) (car (reverse l))))
(setf 'f (open "C:/lispprakt/input78.txt"))
(ud l :x (read f))
(close f)Решение задачи: «Написать рекурсивную функцию, удаляющую x (последнее вхождение) из списка l»
textual
Листинг программы
(defun del-last (lst a) (labels ((last-pos (x y c p) (cond ((null x) p) ((eq y (car x)) (last-pos (cdr x) y (+ c 1) c)) (t (last-pos (cdr x) y c p)))) (del-by-pos (x y p) (cond ((and (= p 0)(eq (car x) y)) (cdr x)) ((eq (car x) y) (cons (car x) (del-by-pos (cdr x) y (- p 1)))) (t (cons (car x) (del-by-pos (cdr x) y p)))))) (del-by-pos lst a (last-pos lst a 0 0)))) ==> DEL-LAST (del-last '(1 2 3 4 1 2 3 1 2) 1) ==> (1 2 3 4 1 2 3 2) (del-last '(1 2 3 4 1 2 3 1 1 1 2) 1) ==> (1 2 3 4 1 2 3 1 1 2)