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)))
))