English 中文(简体)
哈斯凯尔的矩阵操作
原标题:Matrix operation in Haskell

我有一个问题要展示一个矩阵。 这是程序输出的模样。 我有点卡住了 。

unfoldMatrix :: [ [a] ] -> [a]
Main> unfoldMatrix [[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10, 11, 12]]
[1,4,7,10,11,12,9,6,3,2,5,8]

我的代码有效,但它的输出是这种格式的

[[1,4,7]、[8,9]、[6,3]、[2]、[5]、[ ]

任何想法 如何改变代码 工作想要?

transpose2:: [[a]]->[[a]]
transpose2 ([]:_) = []
transpose2 x = (map head x) : transpose2 (map tail x)


unfoldMatrix:: [[a]]->[[a]]
unfoldMatrix ([]:_) = []
unfoldMatrix x =(map head x):unfoldMatrix(tail2(x))

rotate90 :: [ [ a ] ] -> [ [ a ] ]
rotate90 = (map reverse).transpose2

tail2:: [[a]]->[[a]]
tail2 = (tail).rotate90
最佳回答

您不需要 transfection2 , 如果所有的子列表都同样长, 那么与 transfe < data. list 中的 /code > 的 < code> 相同。 因此您的展出将只是

Prelude Data.List> let unfold xxs@((_:_):_) = map head xxs ++ unfold (map reverse . transpose $ map tail xxs); unfold _ = []
Prelude Data.List> unfold [[1,2,3],[4,5,6],[7,8,9]]
[1,4,7,8,9,6,3,2,5]
Prelude Data.List> unfold [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
[1,4,7,10,11,12,9,6,3,2,5,8]
问题回答

暂无回答




相关问题
Euler Problem in Haskell -- Can Someone Spot My Error

I m trying my hand at Euler Problem 4 in Haskell. It asks for that largest palindrome formed by multiplying two three-digit numbers. The problem was simple enough, and I thought my Haskell-fu was up ...

How does foldr work?

Can anybody explain how does foldr work? Take these examples: Prelude> foldr (-) 54 [10, 11] 53 Prelude> foldr (x y -> (x+y)/2) 54 [12, 4, 10, 6] 12.0 I am confused about these executions....

Efficient queue in Haskell

How can I efficiently implement a list data structure where I can have 2 views to the head and end of the list, that always point to a head a tail of a list without expensive calls to reverse. i.e: ...

Problem detecting cyclic numbers in Haskell

I am doing problem 61 at project Euler and came up with the following code (to test the case they give): p3 n = n*(n+1) `div` 2 p4 n = n*n p5 n = n*(3*n -1) `div` 2 p6 n = n*(2*n -1) p7 n = n*(5*n -3)...

Ways to get the middle of a list in Haskell?

I ve just started learning about Functional Programming, using Haskel. I m slowly getting through Erik Meijer s lectures on Channel 9 (I ve watched the first 4 so far) and in the 4th video Erik ...

haskell grouping problem

group :: Ord a => [(a, [b])] -> [(a, [b])] I want to look up all pairs that have the same fst, and merge them, by appending all the list of bs together where they have the same a and discarding ...

Closest equivalent to subprocess.communicate in Haskell

I want to do a popen() / python s subprocess.communicate from Haskell - start a program, give it stdin, and get its stdout/stderr. What s the most direct / Haskellish way to do this?