我将如何创建一个链接列表来保存Ocaml中的数据?我试图做一个单独的链接列表,但即时通讯语法有问题。我只想创建一个模块,只需从链表中获取'a,插入'a或删除'a。链接列表Ocaml
任何人有什么想法?
感谢, 费萨尔阿比德
我将如何创建一个链接列表来保存Ocaml中的数据?我试图做一个单独的链接列表,但即时通讯语法有问题。我只想创建一个模块,只需从链表中获取'a,插入'a或删除'a。链接列表Ocaml
任何人有什么想法?
感谢, 费萨尔阿比德
正如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)));;
不OCaml中已经列出函数?我从大学以来就没有完成SML,但我似乎记得原始数据是head
和tail
。我看到其他人已经在那里实现了一个真正的链表数据结构,但是...例如,检查出Dustin's OCaml Linkedlist。
嗯让我检查一下(达斯汀的东西)。谢谢 – 2009-11-15 21:11:03
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的标准库实现
然而,那有资格作为一个LinkedList,与节点等? – 2009-11-15 21:09:54
@Failsal:是的。虽然它真的是一个堆栈(一个链接列表构建的数据结构),所以您只能从列表的前端推送和弹出节点。 – Juliet 2009-11-15 21:16:47
刚刚在我的回答结尾添加了这个:你可以看看如何在OCaml标准库中实现列表: [OCaml的安装位置] /lib/ocaml/std-lib/list.ml – aneccodeal 2009-11-15 21:19:08
是否有这个功课?如果是这样,请标记为这样。 – 2009-11-15 20:53:06
它并不是真正的家庭作业,只是阅读一本有关数据结构的书籍,并且试图在Ocaml中实现它。 – 2009-11-15 21:09:19