次のChez Schemeコードを考えてみましょう。
(インポート (chezscheme))
(define (list-enumerate ls val proc)
(let loop ((ls ls) (return? #f) (val val))
(if (または (null? ls)
戻る?)
値
(call-with-values (lambda () (proc val (car ls)))
(ラムダ (return? val)
(ループ (cdr ls) return? val))))))
(define (list-index ls proc)
(リスト列挙 ls
0
(ラムダ (i elt)
(if (proc elt)
(値 #ti)
(値 #f (+ i 1))))))
(定義 n 100000)
(データの定義 (iota n))
(time (list-index data (lambda (elt) (= elt (- n 1)))))
それを実行します:
~ $ scheme --script ~/scratch/_list-enumerate-allocation-test-chez-a.sps
(時間 (リスト インデックス データ ...))
コレクションなし
3 ミリ秒の CPU 経過時間
4 ミリ秒経過リアルタイム
8 バイト割り当て
うわー、8 バイトしか割り当てられていないと報告されています。
--programの代わりにオプションを使用して、もう一度実行してみましょう--script。
~ $ スキーム --program ~/scratch/_list-enumerate-allocation-test-chez-a.sps
(時間 (リスト インデックス データ ...))
コレクションなし
3 ミリ秒の CPU 経過時間
3 ミリ秒経過リアルタイム
800000 バイトが割り当てられました
ええ、800000 バイトが割り当てられています。
違いは何ですか?
エド