OCaml : un Langage Fonctionnel
Alan Schmitt
26 septembre 2016
Informations Pratiques
Équipe pédagogique
Alan Schmitt (cours, 2 groupes de TP)
Barbara Kordy (2 groupes de TP)
4 cours
9 TP notés
pas d’examen
http://www.irisa.fr/celtique/aschmitt/teaching/
Pourquoi apprendre OCaml ?
Objectifs de ce cours
Comprendre des concepts fondamentaux de la programmation
(types, récursion)
Apprendre à exploiter les atouts de la programmation
fonctionnelle
Pourquoi ?
Pourquoi s’intéresser à ce style de programmation ?
Peut-on résoudre les mêmes problèmes qu’en C ou Java ?
Pourquoi s’intéresser à la programmation fonctionnelle (1)
Approche favorisant des programmes
corrects;
lisibles;
réutilisables ou modiables.
Un langage de programmation est un outil pointu. Les langages
fonctionnels sont le résultat de nombreuses années de recherche.
Pourquoi s’intéresser à la programmation fonctionnelle (2)
Langages fonctionnels proches des mathématiques. Ce sont des
langages de haut niveau :
permettant de s’abstraire de l’architecture des machine;
donnant des programmes clairs et concis;
favorisant un développement rapide;
fournissant des outils pour une meilleure sûreté (types).
Pourquoi s’intéresser à la programmation fonctionnelle (3)
De nombreux langages intègrent des aspects fonctionnels:
Java
Objective C
JavaScript
Swift
Exemple: gestion de la mémoire
Allouer une liste en C:
struct list *x1 =malloc(sizeof(struct list));
struct list *x2 =malloc(sizeof(struct list));
if (x1 == NULL || x2 == NULL)return NULL;
x1->hd = 1; x1->tl =x2; x2->hd = 2; x2->tl =NULL;
return x1;
Allouer une liste en OCaml
1 :: 2 :: []
Peut-on tout programmer en OCaml?
Règle 110�:
Cellules 111 110 101 100 011 010 001 000
Nouveau centre 0 1 1 0 1 1 1 0
Exemple�:
00000001000
00000011000
00000111000
00001101000
00011111000
00110001000
Règle 110 en OCaml
type cell =T|F
let rule110 triple =match triple with
| (T,T,T) | (T,F,F) | (F,F,F) -> F
| _ -> T
let map3 f l =
let rec aux curl =match curl with
|a:: b:: c:: tl -> f(a,b,c) :: aux (b:: c:: tl)
| [a;b] -> [f(a,b,F)]
| _ -> assert false
in aux (F:: l)
let init = [F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;F;T]
let rec loop n cur =
List.iter (fun F-> print_char ' ' |T-> print_char 'X')cur;
print_newline ();
if n< 20 then loop (n+1) (map3 rule110 cur)
let _ = loop 0init
1 / 52 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !