• # Point de vue de novice

    Posté par . En réponse à la dépêche Le compilateur GHC Haskell en version 8.0.1. Évalué à 4.

    Bonjour, je me suis mis à Haskell il y a quelques semaines. C'est un langage particulièrement difficile à apprendre, surtout si on vient d'un monde impératif, paradigme qui constitue celui de la majorité des langages en production au 21ème siècle.

    En particulier faire des IO est un peu délicat lors d'un premier jet. En fait, pour être productif, il faut y passer beaucoup de temps, un apprentissage sérieux prendra plus de six mois.

    Je trouve l'exemple donné ci-dessus un peu élaboré, et il manque les déclarations de type. Celles ci ne sont pas obligatoires en Haskell mais vivement conseillées car elles permettent de mieux comprendre le code et évitent aussi les erreurs lors de la rédaction d'un programme.

    Voici quelques exemples de fonctions élémentaires réalisées avec Haskell :

    {- Prends un argument qui supporte '*' et retourne le double -}
    dbl x = x*2
    {- double chaque élément dans une liste (list comprehension) -}
    dbll lx = [ dbl k | k<- lx ]
    {- renvoie la liste des digits dans une base donnee (attention dans l'ordre inverse) -}
    get_digits_basis n b = if n<=0 then [] else m:(get_digits_basis (quot (n - m) b) b) where m = mod n b
    {- Même chose mais avec des guards -- plus lisible -- et avec une déclaration de types -}
    get_digits_basis2 :: Int -> Int -> [Int]
    get_digits_basis2 n b
     | n <= 0 = [] 
     | otherwise = m:(get_digits_basis2 (quot (n - m) b) b) 
     where m = mod n b
    {- application en base 10 -}
    get_decimal n = reverse(get_digits_basis2 n 10)
    {- application en base 2 -}
    get_binary n = reverse(get_digits_basis2 n 2)
    {- renvoie la somme des digits d'un nombre entier quelconque -}
    sumDigits [] = 0
    sumDigits (x:y) = sum (get_decimal x) + sumDigits y

    Être productif en Haskell demandera sans doute de longs mois d'apprentissage, en tous cas je n'en suis pas au bout.