验证 函数另类定义 的代价 !
看过 长老ll_J的 “自定义函数” 的文章后,就习惯了 不打lambda今天无聊就 测试了下 这种 另类的自定义函数 是否 既省时又省事!结果大大出乎我的意料!
验证代码如下!(defun t11 (/ t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar ''((x y)(+ x y))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar '(lambda(x y)(+ x y))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
)
;命令: (T11)
; 用时 2.92188 秒
; 用时 0.390625 秒
(defun t12 (/ t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar (function(lambda(x y)(+ x y)))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar '(lambda(x y)(+ x y))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
)
;命令: (T12)
; 用时 0.40625 秒
; 用时 0.394531 秒
(defun t13 (/ t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar '(lambda(x y)(+ x y))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
(setq t1 (getvar "cdate"))
(repeat 100000(mapcar (quote(lambda(x y)(+ x y)))'(1 2 3)'(1 2 3)))
(gxl-sys-timeout t1)
)
;命令: (T13)
; 用时 0.386719 秒
; 用时 0.390625 秒
(defun gxl-sys-timeout (t1 / t2 t3 t4 t5 t6 t7 t8)
(setq t2 (getvar "Cdate"))
(setq t3 t1)
(setq t4 (fix (* 100 t3))
t5 (- (fix (* 10000 t3)) (* t4 100))
t6 (- (* 1000000 t3) (* t5 100) (* t4 10000))
t7 (+ (* t4 3600) (* t5 60) t6)
)
(setq t3 t2)
(setq t4 (fix (* 100 t3))
t5 (- (fix (* 10000 t3)) (* t4 100))
t6 (- (* 1000000 t3) (* t5 100) (* t4 10000))
t8 (+ (* t4 3600) (* t5 60) t6)
)
(princ "\n 用时 ")
(princ (- t8 t7))
(princ " 秒 ")
(princ)
)
_$ (t11)
用时 7.26563 秒
用时 0.875 秒
_$ (t12)
用时 0.71875 秒
用时 0.828125 秒
_$ (t13)
用时 0.671875 秒
用时 0.78125 秒
_$ t13中两个都是使用一样的函数,只是写法不同。
t12中使用了function函数,这个函数的意义是内部优化,对复杂函数应该有效,这种简单函数几乎无从优化,也就不会有什么差别了。
t11一个使用了函数,另一个使用了表达式串,明显是不同的,表达式每次都要“解释”,所以速度会慢。 重复10万次才差0.1秒——实在没必要纠结!
即使代码完全一样,耗时也不一样! lisp是解释运行的,代码越长速度会越慢。 ZZXXQQ 发表于 2014-8-1 09:11
lisp是解释运行的,代码越长速度会越慢。
我也那么理解的!
所以我就不写lambda了!结果不写速度更慢!
而且慢很多
		页: 
[1]