Sum of elements below main diagonal of matrix: Difference between revisions

m
→‎{{header|Haskell}}: Generalised the function to define either upper or lower triangles.
m (→‎{{header|C++}}: Fix condition)
m (→‎{{header|Haskell}}: Generalised the function to define either upper or lower triangles.)
Line 189:
 
=={{header|Haskell}}==
Defining the upper or lower triangle of a square matrix:
 
<lang haskell>---------------------- UPPER OR LOWER TRIANGLE --------------------
 
lowerTrianglematrixTriangle :: Bool -> [[a]] -> Either String [[a]]
lowerTrianglematrixTriangle upper matrix
| upper = go drop id
| isSquare matrix =
| otherwise (Right= .go snd)take $pred
where
foldr
go f g
(\xs (n, rows) -> (pred n, take n xs : rows))
| (pred $ lengthisSquare matrix, [])=
matrix(Right . snd) $
| otherwise = Left "Not a square matrix." foldr
(\xs (n, rows) -> (pred n, takef n xs : rows))
(g $ length matrix, [])
matrix
| otherwise = Left "Not a square matrix."
 
isSquare :: [[a]] -> Bool
isSquare [] = True
isSquare rows = all ((n ==) . length) rows
where
Line 215 ⟶ 218:
putStrLn
(print . sum . concat)
( matrixTriangle
(lowerTriangle testMatrix)
foldr False
 
[ [1, 3, 7, 8, 10],
testMatrix :: [[Integer]]
[2, 4, 16, 14, 4],
testMatrix =
[ [13, 31, 79, 818, 1011],
[212, 414, 1617, 1418, 420],
[37, 1, 93, 189, 115],
[12, 14, 17, 18, 20],
[7, 1, 3, 9, 5])</lang>
]</lang>
{{Out}}
<pre>69</pre>
9,655

edits