🎩
Gauche: リストの各要素を変数に束縛する方法 2 通りのベンチマークをとってみる
長さが 5 のリストがあり、各要素を変数 a, b, c, d, e に束縛する方法について、
それぞれ下記の方法でベンチマークをとってみました。
-
match
マクロを使う -
let-values
マクロを使う
(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