SOに関するこの質問の後で、F#で2つのLazyListをマージしようとしています。もともと2つのリストを一致させるために書かれました。これを取得するためにそれを変更しました:
let rec printLazyList (l1:LazyList<int>) (l2:LazyList<int>) =
match (l1, l2) with
| t, s when t |> LazyList.isEmpty && s |> LazyList.isEmpty -> printfn "";
| t , LazyList.Cons(h2,t2) when t |> LazyList.isEmpty -> printf "%d " h2
let a = LazyList.empty
printLazyList a t2
| LazyList.Cons(h1,t1), s when s |> LazyList.isEmpty -> printf "%d " h1
let b = LazyList.empty
printLazyList t1 b
| LazyList.Cons(h1,t1), LazyList.Cons(h2,t2) -> if h1 = h2 then
printf "%d " h1
printLazyList t1 t2
elif h1 < h2 then
printf "%d " h1
printLazyList t1 l2
else
printf "%d " h2
printLazyList l1 t2
問題は、出力がないことです。いずれの条件も満たされていません(パターンマッチングの最後にaを付けることでこれを確認します。LazyListで使用されるものと通常のF#リストで使用される|_,_ printfn "nothing matches"
ものに根本的な違いはありますか?これは通常のリストで機能したためです(cf.上記のリンク)。cons
::
これも本当にn00bの質問である場合は申し訳ありません。FPはこの時点でかなり難しいように見えます。