;这是一个二叉树的插入功能
(progn
(defun create-node(x)
(list x nil nil)
)
;这里这个create-node运行正常,但是如果使用(cons x '(nil nil))就不行,为什么呢?
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
奇怪,我的标题有写是emacs lisp怎么变没了
这里没有'nil,'(nil nil)里的nil仍然是nil(或许我理解不对?)
单独的(list x nil nil)和(cons x '(nil nil))没有差别(从打印结果看),当放在这个二叉树里,树的层数到3的时候
(cons x '(nil nil))才出问题,不解
一个简单的测试是
(insert (insert (insert nil 7) 6) 5)
当使用(cons x '(nil nil))的时候
运行结果是
(7 (6 (5 #2 nil) nil) nil)
再次运行结果竟然还变成
(7 (5 (5 #2 (6 #2 #3)) (6 (5 #3 #2) #2)) nil)
继续运行竟然会一直变
当使用(list x nil nil)的是
运行结果就是
(7 (6 (5 nil nil) nil) nil)
很正常,重复运行也不会出问题
你是说
(cons '(,nil ,nil))
还是(cons '('nil 'nil))
不过我两个都试了都不行
哦,可以了,以前没见过这种写法--,那list为什么不用这种写法也可以呢?
(list x nil nil) => (cons x (cons nil (cons nil nil)))
(cons x '(nil nil)) => (cons x (quote nil nil)) => (cons x (list
(quote nil) (quote nil))) => (cons x (cons (quote nil) (cons (quote
nil) nil)))
But (cons x (cons nil (cons nil nil))) can't be (cons x (cons (quote
nil) (cons (quote nil) nil)))
So they are different.
BTW, don't use `(,nil ,nil) to do this though it solves your problem.
(setq a (create-node 1))
(setq b (create-node 2))
(setcar (cdr a) 1)
2012/2/28 oni...@gmail.com <oni...@gmail.com>: