2013-03-07 41 views
-1

如何編寫一個函數,它具有參數兩個列表,並且返回兩個列表的連接,而不使用append。lisp lists concatenation

我知道如何獲得第二個列表的頭,但我不知道如何把它放在第一個列表中,如果列表的頭部也是列表,我應該怎麼做。

+2

能否請您提供一些更詳細的信息 – Rockking 2013-03-07 09:44:55

+0

我想到了一個遞歸函數,它將第二個列表的頭部放到第一個列表的最後,並且它調用修改列表的函數,直到第二個列表爲止空。 – 2013-03-07 09:50:12

+0

這是功課嗎?你正在尋找一個重新實現的'append'(第一個列表的副本,最後列出的是原始列表)還是'nconc'(原始列表被修改爲並置)或其他東西(例如,兩個參數的副本)? – sds 2013-03-07 12:51:39

回答

0

中找到更多關於CONCATENATE的信息您是否允許使用LOOP或DO?

像這樣將工作:

(defun my-concat (x y) 
    (loop 
    for o in (reverse x) 
    do (push o y) 
    finally (return y))) 

你可能想,如果循環使用遞歸是不是一種選擇。

+0

我唯一不允許使用的是追加,所以我想我可以使用它。謝謝! – 2013-04-02 06:52:46

0

如果我不得不這樣做,而不使用APPEND(無論何種原因),那麼我可能會做這樣的:

(concatenate 'list list1 list2) 

雖然我感覺到,這可能是一個家庭作業的問題,這是有可能不是您正在尋找的答案,您可以在HyperSpec.

+0

我不確定我被允許使用它。是的,這是作業問題,我認爲目標是編寫一個執行任務的遞歸函數。但我很感激你的幫助。 – 2013-03-07 19:57:54

+0

如果您的目標是編寫遞歸函數,那麼請考慮所涉及的步驟。什麼是一堆列表的串聯?它是第一個列表的第一個元素,與第一個列表其餘元素的第一個元素相同,直到列表中沒有更多元素爲止。然後,這是你迄今構建的列表與下一個列表的第一個元素相同,重複上述步驟,直到沒有更多列表要並置爲止。 – jwmc 2013-03-08 08:47:10