我该如何在OCaml中创建一个链表来存储我的数据?我想创建一个单向链表,但是我却无法正确使用语法。我想要创建一个模块,简单地获取链表中的'a元素,插入'a元素或删除'a元素。
有人有任何想法吗?
我该如何在OCaml中创建一个链表来存储我的数据?我想创建一个单向链表,但是我却无法正确使用语法。我想要创建一个模块,简单地获取链表中的'a元素,插入'a元素或删除'a元素。
有人有任何想法吗?
正如eccodeal所说,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内置了列表:
整数列表: [1;2;3;4;5] ;; 返回:int list = [1; 2; 3; 4]
字符串列表: ["this";"that";"other"];; 返回:string list = ["this"; "that"; "other"]
或者您可以使用cons操作符::来构建列表:
1::2::3::[];; 返回:int list = [1; 2; 3]
要获取列表的头部(第一个项目):
List.hd [1;2;3]
返回1
要获取列表的尾部(第一个项目之后的所有项目):
List.tl [1;2;3] 返回:int list = [2; 3]
此外,您可以查看OCaml标准库中的列表实现方法,方法如下:
[OCaml的安装位置]/lib/ocaml/std-lib/list.ml
OCaml已经有列表作为原语了吗?我自大学以来就没有使用SML了,但我似乎记得head
和tail
原语。不过我看到其他人已经实现了真正的链表数据结构...例如,看看Dustin的OCaml Linkedlist。