main = interact (show . maximum . takeWhile (/= -99) . inputs)
On remarque qu'il n'y a plus de variable et plus de récursion. Je suis un peu habitué à ce style déclaratif, mais je pense ne pas m'avancer trop si je dis que ça se lit presque naturellement :
Il s'agit d'un programme interactif qui affiche la valeur maximale parmi une série (terminée par la valeur spéciale -99) qui a été entrée par l'utilisateur.
Maintenant, je ne pense pas pour autant que ce code soit facile à comprendre / implémenter pour un débutant (je ne pense pas que Haskell soit très adapté comme premier langage), mais on remarque quand même qu'on y gagne à utiliser des fonctions sémantiques (comme "max") vis à vis de l'exemple initial.
Accessoirement, en tant qu'étudiant, je trouve ça totalement idiot de faire comprendre des programmes dont l'explication est aussi tortueuse. On devrait pouvoir trouver des exemples qui parlent plus à l'instinct, pour familiariser avec les concepts (quelque chose où le résultat semble plus utile pour un nouveau, qu'il puisse se rattacher à sa compréhension naturelle pour intégrer ce qui se passe vraiment.)
(header nécessaire au bon fonctionnement du code précédent :)
module Simple where
import Data.List
import Data.Maybe
[^] # Re: Programmation impérative...
Posté par lasts . En réponse au journal Psychology of programming. Évalué à 5.
main = interact (show . maximum . takeWhile (/= -99) . inputs)On remarque qu'il n'y a plus de variable et plus de récursion. Je suis un peu habitué à ce style déclaratif, mais je pense ne pas m'avancer trop si je dis que ça se lit presque naturellement :
Il s'agit d'un programme interactif qui affiche la valeur maximale parmi une série (terminée par la valeur spéciale -99) qui a été entrée par l'utilisateur.
Maintenant, je ne pense pas pour autant que ce code soit facile à comprendre / implémenter pour un débutant (je ne pense pas que Haskell soit très adapté comme premier langage), mais on remarque quand même qu'on y gagne à utiliser des fonctions sémantiques (comme "max") vis à vis de l'exemple initial.
Accessoirement, en tant qu'étudiant, je trouve ça totalement idiot de faire comprendre des programmes dont l'explication est aussi tortueuse. On devrait pouvoir trouver des exemples qui parlent plus à l'instinct, pour familiariser avec les concepts (quelque chose où le résultat semble plus utile pour un nouveau, qu'il puisse se rattacher à sa compréhension naturelle pour intégrer ce qui se passe vraiment.)
(header nécessaire au bon fonctionnement du code précédent :)
module Simple where
import Data.List
import Data.Maybe
inputs :: String -> [Int]
inputs = unfoldr (listToMaybe . reads)