(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