🎩

Gauche: リストの各要素を変数に束縛する方法 2 通りのベンチマークをとってみる

2020/10/07に公開

長さが 5 のリストがあり、各要素を変数 a, b, c, d, e に束縛する方法について、
それぞれ下記の方法でベンチマークをとってみました。

(use gauche.time)
(use util.match)

(define (use-match lis)
  (match lis
    ((a b c d e)
     (+ a b c d e))))

(define (use-let-values lis)
  (let-values (((a b c d e) (apply values lis)))
    (+ a b c d e)))

(define lis '(1 2 3 4 5))

(time-these/report '(cpu 3.0)
  `((match . ,(cut use-match lis))
    (let-values . ,(cut use-let-values lis))))

実行結果です。

Benchmark: ran match, let-values, each for at least 3.0 cpu seconds.
       match: 3.098 real, 3.080 cpu (3.070 user + 0.010 sys)@8370535.71/s n=25781250
  let-values: 2.225 real, 3.170 cpu (3.080 user + 0.090 sys)@4066443.22/s n=12890625

                  Rate match let-values
       match 8370536/s    --      2.058
  let-values 4066443/s 0.486         --

参考

Discussion