• [^] # Re: Ben, non, pas vraiment...

    Posté par . En réponse au message Paradigme fonctionnel : juste un habillage ?. Évalué à 3.

    format :: Int -> String -> [String]
    format n s = let format' [] = []
     format' wds = let (d,fin) = aux n wds
     in (unwords d) : format' fin
     in format' $words s
     where 
     -- aux retourne un couple (premiere ligne, reste du texte)
     aux c [] = ([],[])
     aux c (w:wds) = let lw = length w 
     in if c - lw - 1 < -1
     then ([],w:wds)
     else let (d,fin) = aux (c - lw - 1) wds
     in (w:d,fin)
    main = putStr $ unlines $ format 20 $ concat [ 
     "Ceci",
     " est un",
     "e chaine assez ",
     "longue, voir",
     "e même trop lo",
     "ngue ! Tellement longue que l'on peut se demander si elle va tenir !",
     " sur une seule ligne"]
    
    

    J'ai un peu galéré pour compter les espaces… et évité les trucs très propre à haskell. Il y a très forcement une solution bien plus élégante. Mais ce code est pur, et donc est possible de faire format10 = format 10 et d'utiliser cette fonction de manière concurrente.

    Please do not feed the trolls