Написать рекурсивную функцию, удаляющую 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)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы