如何編寫一個函數,它具有參數兩個列表,並且返回兩個列表的連接,而不使用append。lisp lists concatenation
我知道如何獲得第二個列表的頭,但我不知道如何把它放在第一個列表中,如果列表的頭部也是列表,我應該怎麼做。
如何編寫一個函數,它具有參數兩個列表,並且返回兩個列表的連接,而不使用append。lisp lists concatenation
我知道如何獲得第二個列表的頭,但我不知道如何把它放在第一個列表中,如果列表的頭部也是列表,我應該怎麼做。
中找到更多關於CONCATENATE
的信息您是否允許使用LOOP或DO?
像這樣將工作:
(defun my-concat (x y)
(loop
for o in (reverse x)
do (push o y)
finally (return y)))
你可能想,如果循環使用遞歸是不是一種選擇。
我唯一不允許使用的是追加,所以我想我可以使用它。謝謝! – 2013-04-02 06:52:46
如果我不得不這樣做,而不使用APPEND
(無論何種原因),那麼我可能會做這樣的:
(concatenate 'list list1 list2)
雖然我感覺到,這可能是一個家庭作業的問題,這是有可能不是您正在尋找的答案,您可以在HyperSpec.
我不確定我被允許使用它。是的,這是作業問題,我認爲目標是編寫一個執行任務的遞歸函數。但我很感激你的幫助。 – 2013-03-07 19:57:54
如果您的目標是編寫遞歸函數,那麼請考慮所涉及的步驟。什麼是一堆列表的串聯?它是第一個列表的第一個元素,與第一個列表其餘元素的第一個元素相同,直到列表中沒有更多元素爲止。然後,這是你迄今構建的列表與下一個列表的第一個元素相同,重複上述步驟,直到沒有更多列表要並置爲止。 – jwmc 2013-03-08 08:47:10
能否請您提供一些更詳細的信息 – Rockking 2013-03-07 09:44:55
我想到了一個遞歸函數,它將第二個列表的頭部放到第一個列表的最後,並且它調用修改列表的函數,直到第二個列表爲止空。 – 2013-03-07 09:50:12
這是功課嗎?你正在尋找一個重新實現的'append'(第一個列表的副本,最後列出的是原始列表)還是'nconc'(原始列表被修改爲並置)或其他東西(例如,兩個參數的副本)? – sds 2013-03-07 12:51:39