Posté par Johands .
En réponse au message Haskell.
Évalué à 2.
Donc au hasard, parce que je suis encore un bleu, je proposerais deux versions
: l'une reprenant le message parent et une deuxième que je trouve plus propre.
(je laisse la version avec State monad en exo :o)
l1 = [ [ 1, 0, 4]
, [ 0, 2, 0]
, [ 1, 0, 3]
] :: Int
diag1 :: [ [Int] ] -> Int -> Int
diag1 [] _ = 0
diag1 (x:xs) i = (x !! i) + (diag1 xs (i+1))
sommeDiag1 :: [ [Int] ] -> Int
sommeDiag1 l = diag1 l 0
diag2 :: [ [Int] ] -> Int -> Int
diag2 [] _ = 0
diag2 (x:xs) i = (x !! i) + (diag2 xs (i-1))
sommeDiag2 :: [ [Int] ] -> Int
sommeDiag2 l = diag2 l (length l - 1)
-- one liners
sommeDiag1' :: (Num a) => [ [a] ] -> a
sommeDiag1' l = sum $ zipWith (!!) l [0..]
sommeDiag2' :: (Num a) => [ [a] ] -> a
sommeDiag2' l = sum $ zipWith (!!) (reverse l) [0..]
Toute critique est la bienvenue !
P.S.: j'ai vraiment de gros problème pour insérer du code sur ce site, notamment les '<', '>' et les '[ [ ] ] '. Quelqu'un connaît-il une solution ?
# Chouette du Haskell !
Posté par Johands . En réponse au message Haskell. Évalué à 2.