我在Lisp中做一些功课,使用clisp进行测试,我正在加载此代码并在clisp中运行
(defun myreverse (thelist)
(reverse thelist)
(print thelist)
(if (equal thelist nil)
nil
(if (consp (first thelist))
(cons (myreverse (reverse (first thelist)))
(myreverse (reverse (rest thelist))))
(cons (first thelist) (myreverse (rest thelist))))))
我是Lisp的新手,但这段代码根本没有反转thelist
,我的输出是:
[18]> (myreverse '(a (b c) d))
(A (B C) D)
((B C) D)
(C B)
(B)
NIL
(D)
NIL
(A (C B) D)
我的代码的第一行显示(reverse thelist)
,为什么它不会在第一个打印语句中反转?我错过了什么吗?
答案 0 :(得分:4)
我相信(反向)没有副作用,因此它不会反转原始列表,但会返回一个新的反向列表。这在Common Lisp中并不是那么自然,但在Scheme中是预期的。不过,这里是文档http://www.lispworks.com/documentation/HyperSpec/Body/f_revers.htm#reverse