簡體   English   中英

迷彩遞歸

[英]Ocaml Recursion

交叉點[1; 2; 2; 3; 4; 4; 3] [2; 3] = [2; 2; 3; 3]

我的代碼有問題,因為它當前返回[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匹配項。

您需要更深入地研究第二個列表。

附帶說明一下,此函數不容易表示為單個遞歸函數IMHO。 考慮擁有兩個單獨的子操作可能會更好。 特別是,您對int是否出現在l2感興趣,這是它自己的單獨問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM