ocaml的递归

交叉口[1; 2; 2; 3; 4; 4; 3] [2; 3] = [2; 2; 3; 3]ocaml的递归

没有与我的代码,因为它目前一些错误返回[2; 2],因为它不会与t2匹配,只有h2,有没有人有任何建议我应该考虑改变这个方向?

let rec intersection (l1: int list) (l2: int list) : int list = 

begin match l1, l2 with

| h1::t1, h2::t2 -> if h1=h2 then h1::intersection t1 l2

else intersection t1 l2

| _ -> []

end

回答:

请注意,您的递归调用都通过l2,整个第二个列表。这意味着h2总是要引用相同的元素,即第二个列表的第一个元素。这就解释了为什么你只在2的例子中获得匹配。

您需要深入研究第二个列表。

作为一个方面的评论,这个函数不容易表示为一个单一的递归函数恕我直言。想想有两个单独的子操作可能会更好。尤其是,您对是否出现int值是否在l2感兴趣,这是它自己的单独问题。

以上是 ocaml的递归 的全部内容, 来源链接: utcz.com/qa/260141.html

回到顶部