サポートページ

プログラミングGaucheのサポートページに模範解答があるじゃないっすか!
delete-1の解答をみてみると、結構違うじゃーん。 ><


模範解答

(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 (let ((tail (loop (cdr lis))))
                    (if (eq? tail (cdr lis))
                      lis
                      (cons (car lis) tail)))]))
    (loop lis)))
http://www.kahua.org/cgi-bin/viewvc.cgi/ProgrammingGauche/trunk/chap9/exercise9.1.scm?view=markup

time手続きで所要時間を比較してみたいけど、戻り値ぜんぶ表示しちゃうしなー。
戻り値のリストが長いと、ヒドいことになる。


参考:プログラミングGaucheサポートページ

やってみた!(2009/03/08追記)

timeは複数の式を受け取れることをコメントで教えてもらったので、やってみた。
example-delete-1は模範解答で、my-delete-1が自前で定義したもの(id:yagiey:20090307:1236410685の最後のdelete-1)。

gosh> (define *sqn* (iota 1000000 1))
*sqn*
gosh> (time (example-delete-1 100 *sqn*) #f)
;(time (example-delete-1 100 *sqn*) #f)
; real   0.000
; user   0.000
; sys    0.000
#f
gosh> (time (my-delete-1 100 *sqn*) #f)
;(time (my-delete-1 100 *sqn*) #f)
; real   0.000
; user   0.000
; sys    0.000
#f

あれっ?