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)
上記の 2 番目の例を見るとわかるように、ネストされたリストの最上位の項目を削除するだけで、内部リスト内では変更しません。
このコードは次のようになります。
(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)))
))