考虑一下Chez Scheme代码:
(进口(chezscheme)) (define (list-enumerate ls val proc) (让循环 ((ls ls) (return?#f) (val val)) (如果(或(null?ls) 返回?) 值 (带值调用(lambda()(proc val(car ls))) (lambda (return?val) (循环(cdr ls)返回?val)))))) (定义(列表索引 ls proc) (列表枚举ls 0 (拉姆达(我 elt) (如果 (proc elt) (值#ti) (值 #f (+ i 1)))))) (定义 n 100000) (定义数据(iota n)) (时间(列表索引数据(lambda (elt) (= elt (- n 1)))))
运行:
~ $ 方案 --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 字节。
有什么区别?
埃德