考虑一下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 字节。
有什么区别?
埃德