Написать рекурсивную функцию, удаляющую x (последнее вхождение) из списка l - Lisp

Узнай цену своей работы

Формулировка задачи:

Прочитать из файла значение переменной x. Написать рекурсивную функцию, удаляющую x (последнее вхождение) из списка l. Список задать при вызове функции.
Листинг программы
  1. (defun l1(l)
  2. (reverse (cdr(reverse l)))
  3. )
  4. ;переворачивает список, берет от полученного хвост, и полученный
  5. ;хвост переворачивает
  6. (defun ud (l &key x)
  7. (cond ((null l) l)
  8. ( (equal (car l) x)(cdr l))
  9. ( (no equal (car 1) x) (cdr 1))
  10. (t (cons (ud (l)) (car (reverse l))))
  11. (setf 'f (open "C:/lispprakt/input78.txt"))
  12. (ud l :x (read f))
  13. (close f)

Решение задачи: «Написать рекурсивную функцию, удаляющую x (последнее вхождение) из списка l»

textual
Листинг программы
  1. (defun del-last (lst a)
  2.   (labels ((last-pos (x y c p)
  3.              (cond ((null x) p)
  4.                    ((eq y (car x)) (last-pos (cdr x) y (+ c 1) c))
  5.                    (t (last-pos (cdr x) y c p))))
  6.            (del-by-pos (x y p)
  7.              (cond ((and (= p 0)(eq (car x) y)) (cdr x))
  8.                    ((eq (car x) y) (cons (car x) (del-by-pos (cdr x) y (- p 1))))
  9.                    (t (cons (car x) (del-by-pos (cdr x) y p))))))
  10.     (del-by-pos lst a (last-pos lst a 0 0))))          
  11.              
  12. ==> DEL-LAST
  13.  
  14. (del-last '(1 2 3 4 1 2 3 1 2) 1)
  15.  
  16. ==> (1 2 3 4 1 2 3 2)
  17.  
  18. (del-last '(1 2 3 4 1 2 3 1 1 1 2) 1)
  19.  
  20. ==> (1 2 3 4 1 2 3 1 1 2)

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


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

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

7   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы