2つのリストを反復処理する必要があります。 1つは空のサブリストのリストとして開始し、2番目のサブリストは最初のリストにある各サブリストの最大長を持ちます。OCamlコードは2つのリストで動作します。これを行う良い方法はありますか?
Example; list1 = [[];[];[];]; list2 = [1;2;3]
リスト1の空のサブリストに、サブリストの長さがlist2の対応する整数を決して超えないようにする必要があります。その目的のために、私はelement、elem、および2つのリストlistとlistを与え、サブリストを記入するという次の関数を書いた。
let mapfn elem list1 list2=
let d = ref 1 in
List.map2 (fun a b -> if ((List.length a) < b) && (!d=1)
then (incr d ; List.append a [elem])
else a)
list1 list2
;;
私は今、リストの要素にこの関数を繰り返し呼び出すと、私は予想通り
この機能が働く必要がある最終的な答えを得ることができます。しかし、私はint refを使用する必要性に悩まされていません。 これを行うにはより良い方法がありますか?
私は本当にあなたの説明を理解していません。あなたの現在のコード 'mapfn 42 [[]; []; [];] [3; 4; 5]'は[[42]; []; []] 'それはあなたが欲しいものですか? – newacct
あなたは機能があまり意味のある結果を与えていません。私はmapfn 1 [[]] []; [];] [1; 2; 3] 'が[[1]; [1; 1; 1]]を返すのではなく、ほぼすべての空のリスト – pad
@ newacct。それは実際に私が欲しいものです。リスト[[]; []; []]がプレースホルダであり、最初のサブリストに3つ以上の要素を含めることはできません。2番目のサブリストは4つ以上の要素を持つことはできず、最後の要素は5つ以上の要素を指定できません。 2番目のリスト[3; 4; 5] – ppaul74