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