这只是一个关于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我收到“此表达式不是函数,无法应用”错误
我的符号有问题吗?
发布于 2013-02-04 11:34:50
OCaml没有内置的set类型(取而代之的是Set模块或库)。因此,设置常量也没有内置的符号。
对于较小的集合,通常使用列表。事实上,List.mem是一个对列表(而不是集合)进行操作的函数。列表的符号如下所示:[1; 2; 3; 4]。
(顺便说一句,名为add的函数没有添加任何内容。但也许你才刚刚开始。)
发布于 2013-02-04 11:40:36
OCaml中没有集合表示法。我不知道您的'a set类型是什么,我不明白为什么要用List.mem测试成员资格,但它不应该有特定的符号。
在标准库中有一个Set.Make函数器,将由至少具有类型和键比较函数(see here)的模块实例化:
module StringSet = Set.Make(String)
let set = StringSet.(add 0 (add 1 (add 2 empty)))
let test = StringSet.mem 3 set如果您想要一个方便的表示法,最好的选择是使用一个从列表到集合的转换函数,并使用列表表示法:
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]https://stackoverflow.com/questions/14679885
复制相似问题