練習問題 P.112 delete-1

どう考えてよいかよく分からんかった。


苦肉の策として、
・リストの最後まできたら
 削除する要素がないということなので、元のリストをそのまま返す
・一致する要素が見つかったら、その要素を除いた新しいリストを作る
という実装にしてみました。


9章はもう一度読み直す。

(define (delete-1 elt lis . options)
  (let-optionals* options ((cmp-fn equal?))
    (define (make-list lis rest)
      (if (cmp-fn elt (car lis))
          rest
          (cons (car lis) (make-list (cdr lis) rest))))
    (define (loop tmp-lis)
      (cond ((null? tmp-lis) lis)
            ((cmp-fn elt (car tmp-lis)) (make-list lis (cdr tmp-lis)))
            (else (loop (cdr tmp-lis)))))
    (loop lis)))