これは私が持っているものですが、eltがリストの先頭に表示される場合にのみ機能します
(define (delete-all xx elt)
(cond ((null? xx) null)
((equal? elt (car xx)) (delete (cdr xx) elt))))
余分なケースがありません: 現在の要素が削除したい要素でない場合はどうなりますか? これは、何をする必要があるかについての一般的な考え方です。これは宿題のように見えるため、直接的な回答はしません (homework
質問でタグを使用する必要があります)。空欄は自分で埋めたほうがいい:
(define (delete-all xx elt)
(cond ((null? xx) ; base case: empty list
null) ; return the empty list
((equal? elt (car xx)) ; current element needs to be removed
<???>) ; ignore current element and make recursive call
(else ; current element needs to be added to the list
(<???> (car xx) <???>)))) ; add current element and make recursive call
また、これが再帰的な解決策であることを考えると、答えを呼び出さないdelete
でください。代わりに呼び出す必要がありますがdelete-all
、基本ケースに到達するまで再帰を続けるための適切な引数が必要です。ヒント:cons
とはcdr
どうですか?
(define (delete-all xx elt)
remove* xx elt)