2017-03-08 79 views
0

交叉口[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 

回答

0

請注意,您的遞歸調用都通過l2,整個第二個列表。這意味着h2總是要引用相同的元素,即第二個列表的第一個元素。這就解釋了爲什麼你只在2的例子中獲得匹配。

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

作爲一個方面的評論,這個函數不容易表示爲一個單一的遞歸函數恕我直言。想想有兩個單獨的子操作可能會更好。尤其是,您對是否出現int值是否在l2感興趣,這是它自己的單獨問題。

+0

謝謝你的有用評論! (正式註明) – user