2012-02-28 33 views
4

寫一個清單追加功能我已經定義了一個自定義列表類型爲f部分家庭作業練習。OCaml中

type 'a myType = 
    | Item of ('a * 'a myType) 
    | Empty;; 

我已經做了'長度',現在我需要'追加'功能。 我長功能:

let length l = 
    let rec _length n = function 
    | Empty   -> n 
    | Item(_, next) -> _length (n + 1) next 
    in _length 0 l;; 

但我真的不知道如何使附加功能。

let append list1 list2 = (* TODO *) 

我不能用列表模塊,所以我不能使用任何::@

+1

這顯然是一個家庭作業的問題。以下是我的提示:(a)您可以定義您的函數,以便第二個參數在結果中保持不變。所以你真的只需要擔心第一個參數。 (b)如果你遞歸思考,你只需要知道如何附加到一個空列表,以及如何將一個非空列表分解成一個較小的附加問題(即列表較短的列表)。我希望這可以幫助,但不是太多!此致, – 2012-02-28 18:17:31

+0

我的問題是如何追加兩個元素?我是否必須使用「:=」?謝謝!! – K1ng0e 2012-02-28 18:19:02

+0

您應該考慮創建* new *列表,而不是附加舊列表。但是,第二個列表可能在新列表中顯示不變。如果你有一個「Item(3,Empty)」列表,並且你想在開始時加上'4',結果會是什麼樣子? – 2012-02-28 18:36:11

回答

8

我想我的意見越來越太長算作純粹的意見。我真的不想回答,我只想提示。否則它會破壞目的。

重複我的提示:

a。第二個參數會出現在你的結果沒有影響,所以你可以 花時間擔心的第一個參數。

b。你首先需要知道如何將一些東西添加到空列表中。即,當第一個參數爲空時,你需要 知道該怎麼做。

c。你接下來需要知道如何將非空案例分解成更小的追加 的問題。

如果你不知道如何創建一個項目,那麼你可能會寫一個函數,(比如)一個整數和整數列表啓動,並返回與前面的整數一個新的列表。這裏是一個函數,它接受一個整數,並返回包含只是一個整數的列表:想到這

let list1 k = 
    Item (k, Empty) 

的一種方式是,每次Item出現在你的代碼,你要創建一個新的項目。 Item被稱爲構造因爲它構建了一個項目。

我希望這會有所幫助。

2

你的結構是一個列表,所以你應該通過定義的值nil是空表開始,和功能cons head tail,即追加head元素列表tail的前面。

另一個忠告:有時,它幫助了很多通過採取一個簡單的例子,並試圖做到這一點手動,即分解你想在你自己做簡單的操作,怎樣做才能啓動。然後,你可以概括和編寫代碼...