1) если рассмотреть входной список, может быть простой список, или вы просто хотите удалить элемент на верхнем уровне вложенного списка
например:
delete 2 from (1 2 3 4) will return (1 2 3)
delete 2 from (1 2 3 (2 3) 3 2 4) will return (1 3 (2 3) 3 4)
Как мы видим во втором примере выше, он просто удаляет элемент на верхнем уровне вложенного списка, во внутреннем списке, мы не меняем его.
этот код должен быть:
(define (deleteitem list1 item)
( cond
((null? list1) ’())
((equal? (car list1) item) (deleteItem (cdr list1) item))
(else (cons (car list1) (deleteitem (cdr list1) item)))
))
2) если рассмотреть входной список, может быть вложенный список
например:
input list: (1 2 3 (3 2 (2 4 (2 5 6) 2 5 6) 2 4) 2 3 (2 3 4))
и удалить элемент 2 из списка ввода
the output list should be: (1 3 (3 (3 (5 6) 5 6) 4) 3 (3 4))
и код должен быть:
(define (delete2 list1 item)
( cond
((null? list1) '())
((pair? (car list1)) (con (delete2 (car list1) item) (delete2 (cdr list1) item)))
((equal? (car list1) item) (delete2 (cdr list1) item))
(else (cons (car list1) (delete2 (cdr list1) item)))
))