練習問題 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)))