0% ont trouvé ce document utile (0 vote)
2 vues49 pages

Introduction PF

Ce document présente un cours d'introduction à la programmation fonctionnelle, axé sur le langage Haskell, destiné aux étudiants de L1IN à l'Université de Ngaoundéré. Il couvre les paradigmes de programmation, les propriétés et les avantages de la programmation fonctionnelle, ainsi que les spécificités du langage Haskell, y compris ses constantes et ses opérateurs. Le cours inclut également des informations sur l'organisation, le matériel requis et les environnements de programmation Haskell.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues49 pages

Introduction PF

Ce document présente un cours d'introduction à la programmation fonctionnelle, axé sur le langage Haskell, destiné aux étudiants de L1IN à l'Université de Ngaoundéré. Il couvre les paradigmes de programmation, les propriétés et les avantages de la programmation fonctionnelle, ainsi que les spécificités du langage Haskell, y compris ses constantes et ses opérateurs. Le cours inclut également des informations sur l'organisation, le matériel requis et les environnements de programmation Haskell.
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduc)on à la programma)on

fonc)onnelle
Parcours / Niveau : L1IN
Code: INF122
Semestre 2, 2021/2022

Enseignant: Prof. Dr.-Ing. Paul Dayang


piusday@[Link], pdayang@[Link]

Moniteur: Yannick Bila


yannickbl93@[Link], [Link]@[Link]

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Organisation
• Travail individuel de l’étudiant
• Contrôle continu
• Examen

Matériels
• Installation de la plateforme Haskell ([Link]
• Introduction to Functional Programming using Haskell de Richard Bird (2e
édition)
• Cours basé sur le cours de Claude Evéquoz, 2015.
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Contenu
• Paradigme de programmation
• Motivation et propriétés du langage
• Langage Haskell
• Constantes
• Opérateurs
• Fonctions
• Traitement des listes
• etc.

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Paradigmes de programmation
Un paradigme de programmation est une manière de penser et de
concevoir la programmation et la résolution de problèmes.
• Programmation impérative
• Programmation procédurale (ex. fortran, C)
• Programmation orientée objet (ex. Java, C#)

• Programmation déclarative
• Programmation fonctionnelle (ex. Lisp, Scheme, Haskell)
• Programmation logique (ex. Prolog)
• Base de données (ex. SQL)
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Langages de programmation fonctionnelle
• Les langages de programmation basés sur l’approche fonctionnelle
• LISP
• ML
• Haskell
• Ocaml
• F#
• Erlang
• Clojure
• Scala
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Définition de la programmation fonctionnelle
• Programma'on fonc'onnelle = programma'on applica've,
programma'on uniquement avec des fonc'ons et des valeurs.
• Paradigme radicalement diffèrent du paradigme tradi'onnel (impéra'f)
• Tous les calculs sont faits uniquement en évaluant des expressions (au
sens “pur”, mathéma'que du terme, c’est-a-dire sans effet de bord)
• Pas de no'on de variable modifiable
• Pas de procédures
• Pas d’objets

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Utilisation dans les programmes
• Développement des programmes ou codes suivants
ü Applica4ons techniques et mathéma4ques
ü Intelligence Ar4ficielle (IA)
ü Compilateurs et parseurs
ü Algorithmes

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Pourquoi faire de la programmation fonctionnelle?
• Illustrer le paradigme et notamment comprendre comment la
programmation sans variable et affectation peut se faire également
(programmation sans effet de bord)
• Comprendre les mécanismes avancées de la manipulation des fonctions
• Limitation des effets de bord (déclaration et modification de variables)
• Lisibilité du code

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Propriétés des langages fonctionnels
• Pas d’effet de bord : puisqu’il y’a pas de variables , les problèmes de
variables globales , d’alias , de pointeurs disparaissent; et de évaluations
de la même fonction donnent toujours le même résultat.
• Traitement des fonctions comme des valeurs: les fonctions peuvent être
passées en paramètres et peuvent retourner d’autres fonctions
• Transparence référentielle : tout identificateur peut être substitué a sa
valeur et vice versa
• Utilise la notion de fonction
• Appels successifs de fonctions
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Avantages
• Code plus précis et concis
• Idéal pour la parallélisation des programmes
• Code facilement testable
• Code facilement vérifiable (les fonctions sans état peuvent être vérifiées)
• Aucune référence aux données stokées ou transactions passées
• Se combine bien avec une programmation impérative et orientée objet

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Inconvénients

• Difficultés de compréhension: la programmation fonctionnelle est


certes plus abstraite que la programmation impérative, et donc
certainement plus difficile.
• Pas efficace pour la manipoulation de grandes quantités de données
• Non recommandée pour la connexion à des bases de données et
serveurs
• La programmation récursive peut entraîner de graves erreurs

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Motivation
• Quelques exemples de fonctions
• !!,

• ∑(%&' )

• ∑(%&' ) *

• Ces 3 fonctions utilisent le même principe de récurrence : une condition d’arrêt


(n==0), et un pas inductif indiquant la relation entre n-1 et n
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Motivation

• La première équation donne le condition d’ arrêt et la seconde indique


comment il faut combiner n avec le résultat précédent c.a.d. appliquer la
fonction induction
• A présent , les fonctions !!, ∑(%&' ) et ∑(%&' ) , peuvent s’ écrire

• Les operateurs (*) et (+) sont les fonctions préfixés des operateurs * et +
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Motivation
%
! & ' ()* +,-) .&//&0&,(
"#$
Il faut avant définir une fonction qui accumule les valeurs élevées au carré

• Vérifions que notre fonction somme carré correspond a ce que nous cherchons

Ce qui correspond à notre


1ère définition de sommeCarre
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Motivation

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Le langage Haskell

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Le langage Haskell
• Langage fonctionnel : un langage de programmation dont la syntaxe
et les caractéristiques encouragent la programmation fonctionnelle

• Les fonctions sont toutes pures

• Langage paresseux : les calculs ne sont effectués que lorsque leur


résultat est nécessaire. Cela permet dans certains cas d’exprimer
des programmes de façon beaucoup plus simple, par exemple quand
on ne sait pas jusqu’où on devrait normalement évaluer les
données.
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Le langage Haskell

• Haskell est un langage fortement typé (= strongly typed), ce qui implique


que l’ évaluateur ne veut évaluer que des expressions bien formées. Une
expression est bien formée quand on peut déterminer son type en ne
considérant que les types des sous-expressions et les signatures des
opérations utilisées.

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Environments de programmation Haskell
• Compilateurs
- HUGS : environnement interactif extrêmement populaire.
- GHC : en anglais, « Glasgow Haskell Compiler » parfois appelé
également le « Glorious Haskell Compiler ») est
un compilateur libre pour le langage fonctionnel Haskell. C’est
un environnement interactif (GHCI) plus lent que HUGS.
- NHC: compilateurs produisant des exécutables plus petits et
souvent plus rapides que GHC
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Environments de programmation Haskell
• Lancement d’une session interactive haskell (GHCi)
1. Lancement de la session

2. Définition et évaluation de la fonction sommecarre

3. Application de la fonction sommecarre


4. Détermination du type de la fonction sommeCarre
5. Fin de la session
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Environments de programmation Haskell
• Lancement d’une session interractive haskell (GHCi)
• Application de la fonction sommecarre

• Détermination du type de la fonction sommeCarre

• Fin de la session

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Environments de programmation Haskell
• Lancement d’une session interactive avec Haskell avec chargement
d’un programme
1. Création d’un fichier
2. Lancement de la session
3. Utilisation des fonctions chargées

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes entières
En Haskell , il y’a 2 types différents pour exprimer un nombre en9er: les en9ers
en taille fixe (int) et les en9ers en précision variable (Integer). Ces constantes
peuvent être introduites en base 8, 10 ou 16

• Syntaxe

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes réelles
Comme en C , il y’a des constantes définis sur 32 bits (float) et sur 64 bits
(Double) selon haskell, l’intervalle des réels doit suivre l’intervalle recommandé
par l’IEEE, toute fois les débordements n’ont pas lieu d’ être implémenter
(NaN, +Inf, etc.)

• Syntaxe

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes boolénnes
Il y’a deux valeurs prédéfinis pour les booléens (Bool)

• Syntaxe

• Le langage Haskell est sensible a la casse. Ainsi TRUE e ou true ne


sont pas définies.

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes caractères
• Les constantes caractères et la définition des chaines de caractères sont
toujours complexes a donner formellement si nous souhaitons traiter tous les
cas. Haskell n’est pas une exception. Dans ce qui suit ,nous nous limitons a des
exemples qui couvrent la majorité des cas utiles du cours.
• Un caractère s’écrit entre apostrophes alors qu’une chaine de caractères
s’écrit entre guillemets
Exemple: ‘c’ ou ‘‘coucou’’
• Le symbole \ permet d’introduire les caractères spéciaux

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes caractères
• Le symbole \ permet d’introduire les caractères spéciaux

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Constantes en Haskell
• Constantes caractères

• Une longue chaine de caractères peut s’ écrire sur plusieurs lignes

Remarquons qu’il n’est généralement pas possible d’ exécuter l’exemple


précédent sur un interpréteur Haskell car lors de l’introduction d’une
ligne, le compilateur évalue la ligne alors qu’elle n’est pas terminée.
2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Commentaires

• Un commentaire de ligne s’introduit par deux caractères ‘-’ consécutifs et se


termine a la fin de cette ligne ( comme en Ada)
• Les commentaires peuvent également apparaitre sur plusieurs ligne. Ceux-ci
débutent par les caractères {- et se termine par les caractères -}.
• Des commentaires peuvent être imbriqués :
{- ceci est un commentaire {-sur plusieurs lignes -}-}

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Fonctions
• Les paramètres d’une fonction ne nécessitent pas être mis entre parenthèses
• L’appel de la fonction f(x , y) signifie que f est une fonction qui prend un
paramètre qui est le produit cartésien de deux types. Ceci est différent d’une
fonction f qui prend dont les types dont les types sont ceux du produit
cartésien. Ainsi , on écrit f x y au lieu de f(x , y)
• Remarquons qu’il y’a pas de différence entre g(x) et g x
• Les operateurs sont des fonctions ayant des identificateurs particuliers

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Fonctions

• Un operateur peut s’utiliser comme une fonction : (+) 3 4 et 3 + 4 sont équivalents et


utilisent le même operateur
• Une fonction peut aussi s’utiliser comme un operateur: mod 10 3 et 10 mod 3
utilisent la même fonction mod

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Les operateurs arithmétiques

• Un operateur arithmétiques sont regroupes en4 niveaux de précédence:


§ La négation unaire negate
§ Exponentiation ^
§ Operateurs multiplicatifs *, /, ‘div’ , ‘mod’
§ Moins unaire - et operateurs additifs - et +

N.B: L’operateur - est a la fois utilisé comme moins unaire et comme soustraction

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Les operateurs arithmétiques

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Les operateurs de comparaison

Ces operateurs sont moins prioritaires que les operateurs arithmétiques.


Ce sont ==, /=, <, <=, > et >= et ils ne sont pas associatifs.

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Les operateurs de comparaison

Les opérateurs ==, /=, <, <=, > et >=

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Les operateurs logiques

Il y’en a 3 :
• Négation booléenne NOT
• Et &&
• Ou ||

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Expressions conditionnelles
Elles sont de la forme :

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Expressions conditionnelles

Remarques : contrairement aux énoncés conditionnelles retrouves dans les


langages procéduraux, la clause else n’est pas optionnelle car le résultat de l’
évaluation doit toujours retourner une valeur .

Les expressions conditionnelles en Haskell se comportent de la même manière


que l’operateur ? et : en C

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Conversions explicites entre entiers et reels

La fonction fromInteger convertit un entier en un autre type et en particulier à


un nombre réel

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Conversions explicites entre entiers et réels

Il existe quatre fonctions pour convertir les réels en nombre entier


• floor r donne le plus grand entier plus petit ou égal a r
• ceiling r donne le plus petit entier plus grand ou égal a r
• truncate r donne la partie entière du nombre r
• round r arrondit r

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Conversions explicites entre entiers et caractères
• La Fonction ord convertit un caractère en un nombre entier et retourne le code ASCII de son argument.
Prelude Char> ord 'A’
65
• La fonction chr réalise l'inverse
Prelude Char> chr 65
'A’
Remarque
• Ces 2 fonctions sont dans un module appelé Char. Il faut alors soit
a. qualifier le nom des fonctions par le nom du module :
[Link] ou [Link]
a. ou alors charger le module Char dans une session interactive
Haskell :
Prelude> :module + Char
Prelude Char>

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes
• En Haskell, une structure de données fondamentale est la liste;
• Elle est identifiée par des crochets : [1,4,2];
• Une chaîne de caractères est une liste :

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes

Quelques opérations à appliquer sur les listes

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes
Plusieurs fonctions sont disponibles pour manipuler les listes;
En particulier, on en trouve dans le module [Link]:

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes finies

• Compter les éléments contenus dans une liste

length :: [a] -> Integer


length [] = 0
length (x:xs) = 1 + length xs

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Types composés : listes infinies

• Etant un langage paresseux, on peut facilement représenter des objets


infinis;
• Généralement, les listes infinies sont combinées avec des opérations qui
les rendent éventuellement finies lors de l’évaluation :

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Fonctions : définition
La syntaxe en Haskell est assez proche de celle des mathématiques.
Fonction mathématique :
|· | : Réel → Réel
" #$ " ≤ 0
r → ! #$'('
−"

En Haskell:

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré
Fonctions : déclaration
Lorsqu’on déclare une fonction, la signature est très importante:

Parfois, elle peut être omise: le compilateur peut déduire le type, s’il n’y a
pas d’ ambiguïté.

2021-2022 Prof. Dr.-Ing. Paul Dayang, Math & Info, Université de Ngaoundéré

Vous aimerez peut-être aussi