4

これは私が持っているものですが、eltがリストの先頭に表示される場合にのみ機能します

(define (delete-all xx elt)
  (cond ((null? xx) null)
        ((equal? elt (car xx)) (delete (cdr xx) elt))))
4

3 に答える 3

4

余分なケースがありません: 現在の要素が削除したい要素でない場合はどうなりますか? これは、何をする必要があるかについての一般的な考え方です。これは宿題のように見えるため、直接的な回答はしません (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どうですか?

于 2012-09-09T16:16:33.637 に答える
-2
(define (delete-all xx elt)
  remove* xx elt)
于 2012-09-12T03:32:35.903 に答える