Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何在OCaml中查找列表中数字的对立面?_List_Ocaml - Fatal编程技术网

List 如何在OCaml中查找列表中数字的对立面?

List 如何在OCaml中查找列表中数字的对立面?,list,ocaml,List,Ocaml,我想在列表中找到一个数字的对立面。我想遍历列表中的每个元素,并检查列表中是否有与此元素相对的元素 这就是我到目前为止所做的: 让rec findoposite l= 匹配 |[]->false |f::x::ll->if(List.mem(-x)f=false&&List.mem(-x)ll=false)则true,否则findoposite ll;; 我天真地认为“f”代表了列表中以前的所有元素 我还探讨了这个解决方案:将列表展平,使其更简单。但现在我有点迷路了 这里需要迭代列表中的每个元素

我想在列表中找到一个数字的对立面。我想遍历列表中的每个元素,并检查列表中是否有与此元素相对的元素

这就是我到目前为止所做的:

让rec findoposite l=
匹配
|[]->false
|f::x::ll->if(List.mem(-x)f=false&&List.mem(-x)ll=false)则true,否则findoposite ll;;
我天真地认为“f”代表了列表中以前的所有元素

我还探讨了这个解决方案:将列表展平,使其更简单。但现在我有点迷路了

这里需要迭代列表中的每个元素,检查它的对立面是否在那里,如果是->true,否则继续,直到结束


谢谢。

如果这不是作业,我可以给出一个可能的解决方案。如果我理解正确,你想知道一组整数在求反时是否闭合。您可以计算集合,然后求反集合,然后查看这两个集合是否相等

module ISet =
    Set.Make(struct type t = int let compare = compare end)

let get_set ll =
    List.fold_left
       (List.fold_left (fun is i -> ISet.add i is))
       ISet.empty
       ll

let negate_set is = ISet.map (fun i -> -i) is

let closed_set is = ISet.equal is (negate_set is)
您可以这样尝试:

# closed_set (get_set [[1;2]; [-2;-2]; [3;-3;-1]]);;
- : bool = true
# closed_set (get_set [[1;2]; [-2;-2]; [3;-3]]);;
- : bool = false

写一篇关于你的高层计划的描述可能会很好。将名单扁平化是一种策略,但并非真正的高层次计划。例如,您可能遍历列表列表并计算一个集合,或者可能计算两个集合。然后,您可以通过对集合属性的简单测试来回答这个问题。如果你决定集合中应该包含什么,那将是一个高层次的计划。@JeffreyScofield嗯,这个函数将用于命题逻辑。这一个有一个明确的目标,就是找到一个纯文本,因此我试图在列表中找到它的对立面。这太高了!:-)我指的是从列表中得到你想要的答案的计划。