我正在Lisp編寫一個程序,將兩個列表中的常用元素放入一個新列表中。這是我的代碼。在列表中,如何通過將列表作爲參數的函數對列表進行修改?
(defun test (a b)
(let ((alist nil) (blist nil))
(progn
(join a b alist blist)
(print blist))))
(defun join (a b alist blist)
(cond
((and (null a) (null b))
(setf blist (cons alist blist)))
((equal (car a) (car b))
(setf alist (cons (list (car a) (car b)) alist)))
(t (join (cdr a) (cdr b) alist blist))))
但是函數的輸出總是nil
。然後,我在互聯網上查找了一些東西,發現當我嘗試使用setf
時,它不再指向原始列表,而是指向一個新的列表。所以如果我不能使用setf
,我還能用什麼來實現呢?
我不確定你的功能真的應該做什麼。你想讓你的結果保存兩個輸入列表中相同位置的元素,還是你想要某種交集?如果是後者,那麼重複呢? – danlei
我同意丹尼爾 - 這是一個令人困惑的功能。你能舉一些函數調用和預期輸出的例子嗎?另外,如果函數將兩個列表連接在一起,爲什麼需要四個參數? – zck
您應該始終使用正確縮進的Lisp代碼。 –