2014-10-05 71 views
0

我的老師說我們不能在程序中使用append @所以我會爲它編寫自己的遞歸函數。我需要在OCAML中使用缺點

這裏是我到目前爲止有:

我自己的附加功能

let rec appends a b = 
    match a with 
    | [] -> b 
    | hd::[]-> hd::b 
    | hd::tl-> (what i need help on) 
    ;; 

林不知道如何添加剛纔的最後一個元素,以B如果A名單與多個元素,然後調用附加在第一部分,因爲你只能刪除列表中的第一個元素: 任何意見,將不勝感激

回答

2

東西可能會幫助是想更多的功能也就是說,將代碼視爲原則上附加兩個列表的含義的定義。這與將代碼視爲一組要執行的操作相反。有時候這會有所幫助,特別是在使用功能語言編碼時。

因此,您的第一個案例說:如果a爲空,則追加ab的結果就是b本身。

你的第二個案例說:如果a是一個元素hd的列表,追加ab的結果是,由hd加入到b開始的列表。

您正在尋找追加的一般定義,適用於任何非空列表a。關鍵的洞察是您的定義可以遞歸,即它可以使用您的appends函數。

因此,這裏是一個建議的定義:如果a是一個列表,它的頭是hd,其尾部是tl,附加ab的結果是一個列表,它的頭是hd,其尾部被tl追加到b

(這實際上給了整個事情了。我希望這不會破壞練習。)

+0

要添加到這一點,這也有助於瞭解什麼類型所涉及的所有變量和該功能的目標是什麼。 appends是一個附加兩個列表'a'和'b'並返回一個列表的函數。 'hd'是列表'a'的頭項,'tl'是尾列表。情況1將一個空列表與某個列表「b」組合在一起。情況2將某個項目「hd」與列表「b」組合在一起。情況3應該將某個項目「hd」與某個列表「tl」和另一個列表「b」結合起來。我們知道如何將項目與列表結合起來,但我們有兩個列表......我們如何使這兩個列表成爲一個列表? – 2014-10-05 02:06:25