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