• # Chouette du Haskell !

    Posté par . 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 ?