Разобраться в ошибке - Lisp (229482)
Формулировка задачи:
- (defun deletx ( L x)
- (cond ((null L) nil)
- ((listp (car L)) (cons (deletx(caar l)) (deletx (cdr l))))
- ((neq x (car L)) (cons (car L) (deletx (cdr L) x)))
- ((= x (car L)) (cons x (deletx (cddr l) x)))
- (t(deletx (cdr L) x ))))
- ((listp (car L)) (cons (deletx(caar l)) (deletx (cdr l))))
Решение задачи: «Разобраться в ошибке»
- (defun deletx ( L x)
- (cond ((null L) nil)
- ((listp (car L)) (cons (deletx (car l) x) (deletx (cdr l) x)))
- ((neq x (car L)) (cons (car L) (deletx (cdr L) x)))
- ((eq x (car L)) (cons x (deletx (cddr l) x)))
- (t(deletx (cdr L) x ))))
- ==> deletx
- (deletx '(a b c (b c d)) 'b)
- ==> (a b (b d))
Объяснение кода листинга программы
В данном коде представлена функция deletx
, которая принимает два аргумента: L
и x
.
Если L
равно nil
, то возвращается nil
.
Если L
является списком, то возвращается новый список, полученный путем вызова функции deletx
для первого элемента L
и x
, а затем для второго элемента L
и x
.
Если x
не равно первому элементу L
, то возвращается новый список, состоящий из первого элемента L
и x
.
Если x
равно первому элементу L
, то возвращается новый список, состоящий из x
и второго элемента L
.
Если L
не является списком, то вызывается функция deletx
для cdr
L
и x
.
Применяя эту логику к примеру использования (deletx '(a b c (b c d)) 'b)
, мы получаем следующий результат:
L
равно(a b c (b c d))
.- Первый элемент
L
равенa
. - Второй элемент
L
равенb
. - Третий элемент
L
равен(b c d)
. x
равно'b'
.- Первый элемент
L
не равенx
, поэтому возвращаетсяa
иx
. - Второй элемент
L
равенx
, поэтому возврашаетсяb
и(b c d)
. - Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
(b c d)
иx
. cdr
(b c d)
равен(c d)
.x
равно'b'
, поэтому возвращаетсяb
и(c d)
.- Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
(c d)
иx
. cdr
(c d)
равенd
.x
равно'b'
, поэтому возвращаетсяb
иd
.- Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
d
иx
. cdr
d
равенnil
, поэтому возвращаетсяd
иnil
.- Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
nil
иx
. cdr
nil
равенnil
, поэтому возвращаетсяnil
иnil
.- Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
nil
иx
. cdr
nil
равенnil
, поэтому возвращаетсяnil
иnil
.- Третий элемент
L
не является списком, поэтому вызывается функцияdeletx
дляcdr
nil
иx
. cdr
nil
равенnil
, поэтому возвращаетсяnil
иnil
. Таким образом, результат вызова(deletx '(a b c (b c d)) 'b)
будет(a b (b d))
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д