(defun r (list)
(let ((o()))
(dolist (x list o)
(cons o x))))
(r (list 1 2 3))
它没有。它返回nil
这个函数不应该返回列表中的所有元素吗?
(defun r (list)
(let ((o()))
(dolist (x list o)
(cons o x))))
(r (list 1 2 3))
它没有。它返回nil
这个函数不应该返回列表中的所有元素吗?
您需要更改或某处。例如PUSH具有所需的副作用。 CONS没有。
(defun r (list)
(let ((o()))
(dolist (x list o)
(push x o))))
> (r (list 1 2 3))
(3 2 1)
你想要做这样的事吗?
(defun r(list)
(let ((o()))
(dolist (x list)
(setf o (cons o x)))
o))
(r (list 1 2 3))
(((NIL . 1) . 2) . 3)
如果是这样,请注意以下事项:
dolist
分配x
从list
:(dolist (x list) ...
o
必须设置:(setf o (...
o
必须是 “返回”(dolist(x list o)...)返回o – 2011-03-01 08:10:48
@Rainer:是的,我知道:)我问OP是怎么做的...... – Eelvex 2011-03-01 08:14:08
您的dolist
块返回变量o
的最终值。变量o
最初分配为nil
,然后不会更改。
您可能想在循环内使用push
而不是cons
。
列表不过是一个cons单元格的链表,以nil值结尾。例如(1 2 3)相当于(cons 1(cons 2(cons 3 nil)))
您的代码在设计上是错误的,因为您试图构造的是nil,空列表,然后你试图对其他元素进行反思。什么你正在尝试做了更正,将
(defun r (list)
(let ((o()))
(dolist (el list o)
(setf o (cons el o))))
对不起,错字:“试图用零开始构建” – LakatosI 2011-03-03 12:13:01
什么是你想用'(dolist(X列表O)做......'?好像一个错字。 – Eelvex 2011-03-01 07:46:14
此外,您可能意味着' (dolphin(x list)...') – Eelvex 2011-03-01 07:47:46
'dolist'中的拼写错误是什么? – nakiya 2011-03-01 07:56:51