Написать рекурсивную функцию, удаляющую 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д