関数名:intersection:2つのリストを取り、両方に表示されるすべての要素のリストを返します。Ocaml:再帰:intersection
ie:[1; 2; 2; 3; 4; 4; 3] [2; 3]→[2; 2; 3; 3]
let rec intersection (l1: int list) (l2: int list) : int list =
begin match l1, l2 with
| hd :: tl, hd2 :: tl2 -> if hd = hd2 then hd :: intersection tl l2
else intersection tl l2
| _ -> []
end
このコードに問題がありますが、修正方法がわかりません。コードは実行され、[2; 2] l2の最初の要素である2と比較し続けますが、l1もtl2と比較したいのですが、誰にでも提案がありますか?
Should I add another match [], [] -> to clarify base case at the beginning?
*あなたはどのように書きますか?あなたはどんな問題に直面していますか?あなたの試みを私たちに示すか、あなたのアプローチについて教えてください。 StackOverflowはあなたの宿題に役立つことができますが、私たちはあなたのためにそれを解決しません。 – Bergi
このコードを実装する効率的な方法はありますか? 他のすべて:2番目の要素ごとに ie:[1; 2; 3; 4; 5]→[1; 3; 5] let every_other(l:intリスト)を書きましょう:int list = begin match lを と開始します。 [] - > [] | hd :: tl-> hd :: every_other tl end – anonymoususer
またはこれ? let all_even(l:int list):bool =マッチlを開始する| [] - > true | hd :: tl - >(hd mod 2 = 0)&& all_even tl end – anonymoususer