Ocaml 集合表示法

Ocaml 集合表示法,ocaml,Ocaml,这只是一个关于OCaml中表示法的问题 我正在试着测试这个功能 let rec add (x : 'a) (l : 'a set) : bool = begin match l with | [] -> [] | hd :: rest -> if x = hd then rest else (hd :: (add x rest)) end 我的测试用例是 let test () : bool = add (3 [1; 2; 4]) = [1; 2; 3; 4] ;; run_tes

这只是一个关于OCaml中表示法的问题

我正在试着测试这个功能

let rec add (x : 'a) (l : 'a set) : bool =
begin match l with
| [] -> []
| hd :: rest -> if x = hd then rest else (hd :: (add x rest))
end
我的测试用例是

let test () : bool =
add (3 [1; 2; 4]) = [1; 2; 3; 4]
;; run_test "add 3 [1; 2; 4]" test
我得到了一个答案,这个表达式不是函数,不能应用错误


我的符号有问题吗?

OCaml没有内置的集合类型,而是有一个集合模块或库。所以,设置常量也没有内置的符号

对于较小的集合,通常使用列表。事实上,List.mem是一个对列表而不是集合进行操作的函数。列表的符号如下:[1;2;3;4]


作为旁注,名为add的函数不会添加任何内容。但也许您才刚刚开始。

OCaml没有内置的集合类型,而是有一个集合模块或库。所以,设置常量也没有内置的符号

对于较小的集合,通常使用列表。事实上,List.mem是一个对列表而不是集合进行操作的函数。列表的符号如下:[1;2;3;4]


作为旁注,名为add的函数不会添加任何内容。但也许您才刚刚开始。

OCaml中没有集合表示法。我不知道您的“a集合类型”是什么,我不明白为什么要用List.mem测试成员资格,但它应该没有特定的符号

标准库中有一个函子,由一个模块实例化,该模块在键上至少有一个类型和一个比较函数:

如果您想要方便的表示法,最好使用从列表到集合的转换函数,并使用列表表示法:

let set_of_list li = List.fold_left (fun s v -> StringSet.add v s) StringSet.empty li
let set = set_of_list [0; 1; 2]

OCaml中没有集合表示法。我不知道您的“a集合类型”是什么,我不明白为什么要用List.mem测试成员资格,但它应该没有特定的符号

标准库中有一个函子,由一个模块实例化,该模块在键上至少有一个类型和一个比较函数:

如果您想要方便的表示法,最好使用从列表到集合的转换函数,并使用列表表示法:

let set_of_list li = List.fold_left (fun s v -> StringSet.add v s) StringSet.empty li
let set = set_of_list [0; 1; 2]

谢谢我真的编辑了我的帖子,我在功能上犯了一个错误。现在我得到了另一个错误,即使我改变了它。它指的是什么?OCaml中的函数参数没有括号。要调用所需的add:add 3[1;2;4]。我看到了一些其他的问题,但一次只能解决一件事!我更改了add函数。我认为递归部分可能有问题,但我不太确定它是什么。事实上,递归在我看来还行。但其他东西是错的。考虑一个when元素已经在函数c的集合b返回类型中,如何判断两个集合是否相等。如果选择将集合保持为排序列表,则没有区别。如果只需要测试成员身份和插入值,则不需要保持排序。如果你有强烈的要求和大量的元素,使用一个真正的设置作为gasche建议。谢谢!我真的编辑了我的帖子,我在功能上犯了一个错误。现在我得到了另一个错误,即使我改变了它。它指的是什么?OCaml中的函数参数没有括号。要调用所需的add:add 3[1;2;4]。我看到了一些其他的问题,但一次只能解决一件事!我更改了add函数。我认为递归部分可能有问题,但我不太确定它是什么。事实上,递归在我看来还行。但其他东西是错的。考虑一个when元素已经在函数c的集合b返回类型中,如何判断两个集合是否相等。如果选择将集合保持为排序列表,则没有区别。如果只需要测试成员身份和插入值,则不需要保持排序。如果你有很强的要求和大量的元素,那么按照gasche的建议使用一个实数集。错误来自3[1;2;4],你将3应用于[1;2;4]。在上下文中,您可能打算将函数add应用于参数3和[1;2;4]。您可以使用符号add 3[1;2;4]来实现这一点。错误来自3[1;2;4],您将3应用于[1;2;4]。在上下文中,您可能打算将函数add应用于参数3和[1;2;4]。您可以使用符号ADD3[1;2;4]来完成此操作