二回ループしている点が効率悪いが、テストはパス。 gosh> (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))) delete-1 gosh> (let ((data (list 1 2 3 4 5))) (test* "non-copy delete-1" data (delete-1 6 data) eq?)) test non-copy delete-1, expects (1 2 3 4 5) ==> ok #
ニャンパス株式会社の運営する越谷レイクタウンのコワーキングスペースHaLakeと、エンジニアリングな日々。