2009-11-15 133 views
4

我將如何創建一個鏈接列表來保存Ocaml中的數據?我試圖做一個單獨的鏈接列表,但即時通訊語法有問題。我只想創建一個模塊,只需從鏈表中獲取'a,插入'a或刪除'a。鏈接列表Ocaml

任何人有什麼想法?

感謝, 費薩爾阿比德

+1

是否有這個功課?如果是這樣,請標記爲這樣。 – 2009-11-15 20:53:06

+0

它並不是真正的家庭作業,只是閱讀一本有關數據結構的書籍,並且試圖在Ocaml中實現它。 – 2009-11-15 21:09:19

回答

8

正如aneccodeal告訴的那樣,ocaml已經有了列表。

但是,爲了您的利益,這是您如何建立自己的清單。顯然,你永遠不會在真正的應用程序中使用它:)如果你想要一些樹,數據結構將非常相似。

exception Empty_list 

type 'a my_list = Nil | List of 'a * 'a my_list 

let head = function 
    Nil -> raise Empty_list 
    | List(e,_) -> e;; 

let tail = function 
    Nil -> Nil 
    | List(_,t) -> t 

let l = List(1, List(4, List(8, Nil)));; 

print_endline (string_of_int(head l));; 

print_endline (string_of_int (head(tail l)));; 
4

不OCaml中已經列出函數?我從大學以來就沒有完成SML,但我似乎記得原始數據是headtail。我看到其他人已經在那裏實現了一個真正的鏈表數據結構,但是...例如,檢查出Dustin's OCaml Linkedlist

+0

嗯讓我檢查一下(達斯汀的東西)。謝謝 – 2009-11-15 21:11:03

5

OCaml有內置的列表:

整數列表: [1; 2; 3; 4; 5]; 返回:int list = [1; 2; 3; 4]

字符串列表: [「this」;「that」;「other」] ;; 返回:string list = [「this」; 「那」; 「其他」]

或者你可以使用利弊操作::建立名單:

1 :: 2 :: 3 :: []; 返回:int list = [1; 2; 3]

爲了得到一個列表的頭(第一項):

List.hd [1; 2; 3]
返回1

爲了得到一個列表的尾部(所有項目在第一項之後)

List.tl [1; 2; 3] 返回:int list = [2;

爲OCaml的[安裝位置] /lib/ocaml/std-lib/list.ml

:3]

此外,您還可以通過觀察來看看如何列出了OCaml的標準庫實現

+0

然而,那有資格作爲一個LinkedList,與節點等? – 2009-11-15 21:09:54

+0

@Failsal:是的。雖然它真的是一個堆棧(一個鏈接列表構建的數據結構),所以您只能從列表的前端推送和彈出節點。 – Juliet 2009-11-15 21:16:47

+1

剛剛在我的回答結尾添加了這個:你可以看看如何在OCaml標準庫中實現列表: [OCaml的安裝位置] /lib/ocaml/std-lib/list.ml – aneccodeal 2009-11-15 21:19:08