Хотя я понимаю, что в Haskell могут быть функции транспонирования или ZipList, я пытаюсь создать свою собственную функцию транспонирования, которая будет принимать n списков равной длины m и транспонировать ихв m списки длины n .
Пока у меня есть функция, почти работающая со следующим кодом:
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
, но у меня возникают проблемы с его реализацией таким образом.