遇到一个奇怪的现象
lisp吧
全部回复
仅看楼主
level 5
j18943192179 楼主
代码如下:
(defparameter *test* '((1 2 3) (4 5 6)))
(nreverse *test*)
(setq *test* (cons '(7 8 9) *test*))
(nreverse *test*)
此时*test*的值为:((1 2 3)(4 5 6)(7 8 9))
但是当把后面三行写在一个函数里:
(defun paixu (initial final)
(nreverse initial)
(setq initial (cons final initial))
(nreverse initial))
此时*test*的值却是((4 5 6)(7 8 9)),但是函数的返回结果是正常的,不知道*test*的值怎么会这么奇怪。
2013年08月19日 14点08分 1
level 8
nreverse是破坏性函数, 传进去的参数会变成什么样子和具体实现有关,
要用nreverse, 一定要把返回值绑定的变量上
例如把(nreverse initial)改为(setf initial (nreverse initial))
2013年08月19日 14点08分 2
level 13
解决了么
✎﹏ 【Lisp·少帅】 南无阿弥陀佛
   --SONY®LT29经典红双囍
2013年08月30日 00点08分 3
恩,解决了,实际上虽然nreverse是破坏性函数,但并未改变变量的指针。
2013年08月30日 13点08分
1