format::Int->String->[String]formatns=letformat'[]=[]format'wds=let(d,fin)=auxnwdsin(unwordsd):format'fininformat'$wordsswhere-- aux retourne un couple (premiere ligne, reste du texte)auxc[]=([],[])auxc(w:wds)=letlw=lengthwinifc-lw-1<-1then([],w:wds)elselet(d,fin)=aux(c-lw-1)wdsin(w:d,fin)main=putStr$unlines$format20$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.
[^] # Re: Ben, non, pas vraiment...
Posté par Zylabon . En réponse au message Paradigme fonctionnel : juste un habillage ?. Évalué à 3.
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