Haskell に転置関数または ZipList 関数がある可能性があることは理解していますが、同じ長さmのn 個のリストを取り、それらを長さnのm個のリストに転置する独自の転置関数を作成しようとしています。
これまでのところ、関数は次のコードでほぼ機能しています。
list = [[1,2,3],[4,5,6],[7,8,9]]
head' (x:xs) = x
head'' [] = []
head'' (xs:lxs) = head' xs:head'' lxs
tail' [] = []
tail' (x:xs) = xs
tail'' [] = []
tail'' (xs:lxs) = tail' xs:tail'' lxs
merge (xs:lxs) = (head' xs:head'' lxs):(merge (tail' xs:tail'' lxs))
merge list
> ghciで実行すると、次の出力が得られます。
[[1,4,7],[2,5,8],[3,6,9],[*** Exception: list2.hs:16:1-16: Non-exhaustive patterns in function head'
head'
これは、関数の空のリストの基本ケースが欠落していることを意味していると確信しています。リストは転置されますが、閉じられません。この場合、その問題にどのように対処しますか?と関係があるのではないかと思いますがMaybe
、そのように実装するのに苦労しています。