繁体   English   中英

OCaml积分功能逻辑错误

[英]OCaml intesection function logical error

因此,我试图编写一个函数,该函数返回元素l1和l2共有的列表,但是每次都返回空,而我找不到逻辑错误。 `

let rec intersection (l1 : 'a list) (l2 : 'a list) : 'a list = 
  let rec aux l1 l2 acc = match l1 with 
    | [] -> []
    | h1::t1 -> begin match l2 with
      | [] -> []
      | h2::t2 -> if h1 = h2 then aux t1 t2 (h1::acc) else aux l1 t2 acc 
      end in
    aux l1 l2 []

在aux函数中,您可能希望在l1或l2为空时返回acc,而不返回[]。 这就是为什么函数每次都返回[]的原因。 但是,正如Jeffrey的回答所述,如果两个列表中元素的顺序不同,这仍然无法正常工作。 您可以事先对其进行排序。

对第二个列表尾部的aux pass t2所有递归调用。 当它到达第二个列表的末尾时,它完成了-在这种情况下,没有递归调用。 因此, aux只能一次浏览第二个列表。 但是(假设列表的顺序没有限制),您需要多次浏览第二个列表,第一个列表的每个元素一次。

对于它的价值,我很想使用两个辅助函数来解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM