これは、命令型スタイルを使用してF#でマージソートを実装した方法です。
let merge (l1: List<string>, l2: List<string>) =
let r: List<string> = new List<string>()
let mutable (i,j, cnt1, cnt2) = (0,0, l1.Count, l2.Count)
while i < cnt1 && j < cnt2 do
if l1.[i] <= l2.[j] then
r.Add (l1.[i])
i <- i + 1
else
r.Add (l2.[j])
j <- j + 1
if i = cnt1 then
while j < cnt2 do
r.Add (l2.[j])
j <- j + 1
else
while i < cnt1 do
r.Add (l1.[i])
i <- i + 1
r
これを代替の「機能的な」スタイルの実装に変換し、可能であればどのように機能するかを説明できますか?現在、リスト内包表記などを勉強していますが、ここで使用するというアイデアは思いつきません。