目的是搞一个类似实时计算的变量的东西,我可以存一个lambda,需要这个变量的时候传参数,或者直接存sexp,参数用一个特殊特殊symbol表示(这里是var
,可能会用SELF
啥的),用的时候包裹在let
scope里。
我想知道哪种更好(效率高,速度和内存方面)但是对底层的实现了解不深没法判断。我用benchmark
测试感觉差不多。
;;; 1
(funcall (lambda (var) (+ var 1)) 1)
;;; 2
(let ((var 1)) (+ var 1))
(benchmark-run 1000 (funcall (lambda (var) (+ var 1)) 1))
(0.0003710000000000001 0 0.0)
(0.00016800000000000002 0 0.0)
(0.00016900000000000002 0 0.0)
(0.000178 0 0.0)
(0.00016899999999999996 0 0.0)
(0.00034 0 0.0)
(0.00032300000000000004 0 0.0)
(0.00032599999999999996 0 0.0)
(benchmark-run 1000 (let ((var 1)) (+ var 1)))
(0.000158 0 0.0)
(0.000156 0 0.0)
(0.000157 0 0.0)
(0.00015800000000000002 0 0.0)
(0.00015700000000000002 0 0.0)
(0.00030500000000000004 0 0.0)
(0.000433 0 0.0)
(0.000306 0 0.0)
P.S. 话说lambda里面用的是不是就是let
啊……我不能确定
P.S. 标题真的想不出来,原谅我起名废