第9章演習問題(P.112)
(define (delete-1 elt lis . options) (if (member elt lis) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond [(null? lis) '()] [(cmp-fn elt (car lis)) (cdr lis)] [else (cons (car lis) (loop (cdr lis)))])) (loop lis)) lis))
memberであるかどうか調べてからやるのは反則だろうか?
ヒント通りやるとこんな感じのはず.
(define (delete-1 elt lis . options) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond [(null? lis) '()] [(cmp-fn elt (car lis)) (cdr lis)] [else (if (eq? (delete-1 elt (cdr lis)) (cdr lis)) lis (cons (car lis) (loop (cdr lis))))])) (loop lis)))