1) si vous considérez que la liste d'entrée peut être une liste simple, ou que vous voulez juste supprimer l'élément au niveau supérieur d'une liste imbriquée. par exemple :
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)
comme nous pouvons le voir dans le deuxième exemple ci-dessus, il supprime simplement l'élément au niveau supérieur de la liste imbriquée, dans la liste interne, il ne le modifie pas.
ce code devrait être :
(define (deleteitem list1 item)
( cond
((null? list1) ’())
((equal? (car list1) item) (deleteItem (cdr list1) item))
(else (cons (car list1) (deleteitem (cdr list1) item)))
))
2) si l'on considère que la liste d'entrée peut être une liste imbriquée
par exemple :
input list: (1 2 3 (3 2 (2 4 (2 5 6) 2 5 6) 2 4) 2 3 (2 3 4))
et supprimer l'élément 2 dans la liste d'entrée
the output list should be: (1 3 (3 (3 (5 6) 5 6) 4) 3 (3 4))
et le code devrait être :
(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)))
))