2009-11-15 117 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