Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programmation fonctionnelle / Haskell

Programmation fonctionnelle / Haskell

Découverte de la programmation fonctionnelle et du langage haskell

Clément Delafargue

October 15, 2012
Tweet

More Decks by Clément Delafargue

Other Decks in Programming

Transcript

  1. Une profusion de langages Il existe beaucoup de langages de

    programmation Des c´ el` ebres (C, Java) D’autres moins (J) Pourquoi cette profusion ?
  2. Le paradigme imp´ eratif Remonte ` a la machine de

    Turing Manutention d’espace m´ emoire Proche du fonctionnment des processeurs
  3. Le paradigme fonctionnel Remonte au Lambda Calcul D´ efinition de

    fonctions et de leur combinaisons Proche des math´ ematiques
  4. Pourquoi le fonctionnel ? Raisonnement simplifi´ e D´ ebogage ais´

    e Tests unitaires plus simples Concurrence Garanties fortes
  5. La “transparence r´ ef´ erentielle” Une expression d´ enote toujours

    la meme chose, ind´ ependamment du contexte. Terme pas toujours employ´ e correctement. En r´ ealit´ e : “Absence d’effets de bord”
  6. La r´ ecursion Fondamental Comment repr´ esenter une boucle sans

    la mutabilit´ e ? Approche math´ ematique x^0 = 1 x^n = x * x^(n-1) Insiste sur la d´ ecomposition du probl` eme
  7. La programmation fonctionnelle typ´ ee Chaque valeur a un type

    (Entier, Bool´ een, Liste d’entiers, Fonction des entiers vers les Bool´ eens) Syst` emes de types souvent sophistiqu´ es
  8. Correspondance de Curry Howard Correspondance preuve - programme. type <=>

    proposition programme bien typ´ e <=> preuve de la proposition Fondamental
  9. Saines lectures Pour mieux comprendre pourquoi la FP est int´

    eressante FP for the rest of us Why FP matters La r´ ef´ erence : Structure and Interpretation of Computer Programs
  10. Un langage fonctionnel, Haskell Haskell (nomm´ e en hommage `

    a Haskell Curry) Premi` ere version en 1990 (un an avant python) “Design by committee” (entre autres : Simon Peyton Jones, John Hughes, Philip Wadler)
  11. Les caract´ eristiques de Haskell Haskell est un langage :

    Fonctionnel Statiquement typ´ e “Fortement” typ´ e ` A inf´ erence de type Pur Paresseux Utilis´ e dans la vraie vie (un peu)
  12. En d´ etail : Typage statique : typage d´ etermin´

    e en amont Typage “fort” : ` a voir ` A inf´ erence de type : capable de d´ eterminer le type d’une variable Pur : pas d’effets de bord Paresseux : ne calcule un terme que quand (et si) il en a besoin
  13. Les avantages Haskell est un langage : Fonctionnel : composablit´

    e Statiquement typ´ e : sˆ uret´ e “Fortement” typ´ e : sˆ uret´ e ` A inf´ erence de type : concision Pur : composabilit´ e Paresseux : composabilit´ e
  14. Pourquoi apprendre Haskell ? Pour le fun Pour voir ce

    qu’est un beau langage Pour les garanties qu’il apporte Pour la rapidit´ e de d´ eveloppement
  15. Qui utilise Haskell ? Moi Cette pr´ esentation a ´

    et´ e g´ en´ er´ ee par un programme en Haskell Elle est affich´ ee dans un syst` eme de fenˆ etrage en Haskell Des banques, en interne Facebook Des agences de d´ eveloppement
  16. Quelques projets en Haskell pandoc: conversion de documents xmonad: gestionnaire

    de fenˆ etres Darcs: gestionnaire de versions Yesod: framework web
  17. Quelques exemples La somme des n premiers nombres premiers primes

    = nubBy (\x y -> (gcd x y) > 1) [2..] sumOfPrimes n = sum $ take n primes La suite de Fibonacci fibs = fix ((0:) . scanl (+) 1) fibs’ = 0 : 1 : zipWith (+) fibs’ (tail fibs’)
  18. La syntaxe Haskell Annotation de type (facultatif) a :: String

    f :: String -> String -> Boolean (+) :: (Num a) => a -> a -> a
  19. La syntaxe Haskell D´ eclaration de fonction add2 a =

    a + 2 isTwo 2 = True isTwo _ = False headOr a [] = a headOr _ (x:_) = x
  20. La syntaxe Haskell Application de fonction add2 4 isTwo (add2

    0) 3 + 3 Application partielle (+3) (==0)
  21. La syntaxe Haskell D´ eclaration de variable let x =

    0, y = 2 in x + y D´ eclaration de fonction interne foo x = bar (x + 2) where bar y = y + 5
  22. Comment aboutir ` a la solution Pour un algorithme r´

    ecursif Exprimer un cas d’arret Exprimer un pas de r´ eduction
  23. Quelques petits exercices Calculer la somme des entiers naturels multiples

    de 3 ou 5 inf´ erieurs ` a 1000 Calculer l’inverse d’une liste Le Fizz Buzz