Quelques particularités du langage OCaml

Documents pareils
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Recherche dans un tableau

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Logiciel Libre Cours 2 Fondements: Programmation

Cours de Programmation 2

TP 1. Prise en main du langage Python

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Introduction au langage C

Peut-on tout programmer?

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Classes et Objets en Ocaml.

I. Introduction aux fonctions : les fonctions standards

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Chapitre 2 Devine mon nombre!

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Initiation à la programmation en Python

Présentation du langage et premières fonctions

Introduction à l algorithmique et à la programmation M1102 CM n 3

Cours Informatique Master STEP

Notions fondamentales du langage C# Version 1.0

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

1 TD 2 : Construction d'une chier Acrobat et envoi par

ACTIVITÉ DE PROGRAMMATION

Télécom Nancy Année

Programmation en Caml pour Débutants

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Les chaînes de caractères

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Java Licence Professionnelle CISII,

STAGE IREM 0- Premiers pas en Python

Langage Java. Classe de première SI

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programmer en JAVA. par Tama

Une introduction à Java

Programmation C++ (débutant)/instructions for, while et do...while

1. Structure d'un programme FORTRAN 95

UE Programmation Impérative Licence 2ème Année

Généralités sur le Langage Java et éléments syntaxiques.

Cours d algorithmique pour la classe de 2nde

Principes des langages de programmation INF 321. Eric Goubault

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Cours 1 : La compilation

Examen Médian - 1 heure 30

Cours 14 Les fichiers

Programmation en Java IUT GEII (MC-II1) 1

Date : Tangram en carré page

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Rappels Entrées -Sorties

Exercices INF5171 : série #3 (Automne 2012)

Conventions d écriture et outils de mise au point

Algorithmique et Programmation, IMA

INF 321 : mémento de la syntaxe de Java

Programme Compte bancaire (code)

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Compilation (INF 564)

Algorithmique & programmation

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Compte-rendu de projet de Système de gestion de base de données

Découverte de Python

TD3: tableaux avancées, première classe et chaînes

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Plan du cours. Historique du langage Nouveautés de Java 7

modules & compilation

Diagramme de classes

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

2 Comment fonctionne un ordinateur, dans les grandes lignes

Propagation sur réseau statique et dynamique

Chapitre 2. Classes et objets

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Les structures. Chapitre 3

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Couples de variables aléatoires discrètes

Vers l'ordinateur quantique

UE C avancé cours 1: introduction et révisions

Utilisation d objets : String et ArrayList

Bernard HAMM, Évelyne LAVOISIER

Cours d Algorithmique et de Langage C v 3.0

Programmation. fonctionnelle, impérative, logique et orientée objet

OCL - Object Constraint Language

Premiers Pas en Programmation Objet : les Classes et les Objets

as Architecture des Systèmes d Information

Génie informatique. Claude Petitpierre, André Maurer

Système binaire. Algèbre booléenne

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Transcription:

Quelques particularités du langage OCaml 1 De la diérence avec Python 1.1 Caml est langage fonctionnel Trois paradigmes de programmation important sont les trois suivants : Programmation impérative : en informatique, il n'y a que des suites d'instructions. Programmation fonctionnelle : en informatique, il n'y a que des fonctions. Programmation objet : en informatique, il n'y a que des objets. Évidement, se restreindre de façon exclusive à l'un de ces trois paradigmes n'est guère pertinent. Ainsi, Python comme Caml supportent ces trois styles de programmation. L'idée de l'enseignement en classe préparatoire est : 1. d'utiliser Python pour bien illustrer la programmation impérative ; 2. d'utiliser Python pour bien illustrer la programmation fonctionnelle. 1.2 Caml est langage fortement typé La plupart des langages informatiques sont typés, c'est-à-dire que les termes du langage ont tous un type. Python est faiblement typé : tous les termes ont un type mais le type de retour d'une fonction peut changer, le type des éléments d'une même liste peut changer, des conversions de type automatiques sont possibles,.. Caml est fortement typé : rien de ce qui précède n'est possible! 1.3 Quelques points de syntaxe Le document d'accompagnement de ce chapitre est encore plus important que le chapitre lui-même : c'est l'aide mémoire que j'ai tapé de mes blanches mains l'an dernier et qui répertorie les points de syntaxe les plus importants en Caml. 2 Quelques types en Caml 2.1 Le type int C'est le type des entiers relatifs. Mais en fait non. Parce qu'en OCaml, conformément à ce que vous avez appris dans le premier chapitre d'informatique non optionnelle et contrairement à ce que fait Python, les entiers sont codés sur un nombre limités de bits (normalement 63, mais possiblement 31 suivant le processeur). Donc en fait int correspond plutôt à l'ensemble des entiers modulo 2 63 qu'on note Z/2 63 Z en mathématiques. Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les entiers. Exemple 1 Exécutons 4611686018427387903+1

Exemple 2 2.2 Le type float C'est le type des ottants. Eux aussi sont codés sur un nombre limité de bits, normalement 64. Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les ottants. À cause du typage fort (ou grâce à celui-ci suivant le point de vue), les opérations sur les ottants ne sont pas les mêmes que sur les entiers! Exemple 3 Comparons 4611686018427387902. et 4611686018427387904. Exemple 4 2.3 Le type bool C'est le type des booléens (true, false). Attention, c'est true et false sans majuscule, contrairement au choix fait en Python. C'est l'occasion de préciser qu'en Caml les majuscules sont réservées aux classes (disons aux types pour simplier). Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les booléens. Autre remarque : le mot-clé and ne correspond pas au "et logique", il est réservé à autre chose. Exemple 5 2.4 Caractères et chaînes de caractères Contrairement à Python (et c'est mieux), Caml distingue les caractères des chaines de caractères. Le type des caractères est char, celui des chaînes de caractères est string. Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les caractères et les chaînes de caractères. Exemple 6

Exemple 7 2.5 Le type 'a List On a déjà vu dans le cours d'introduction le type 'a List qui correspond aux listes chaînées d'éléments de type 'a. Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les listes. À cause du typage fort (ou grâce à celui-ci suivant le point de vue), tous les éléments d'une liste doivent avoir le même type! Exemple 8 Rappel : l'accès au n ième élément d'une liste chaînée n'est pas gratuit, il nécessite de suivre n pointeurs. 2.6 Le type 'a Array C'est le type des tableaux d'éléments de type 'a. Lorsqu'on dénit un tableau, on doit spécier sa longueur et celle-ci ne changera plus jamais. Un nombre de cases mémoire adjacentes correspondant est alors réservé pour les éléments du tableau. Avantage sur les listes : l'accès au i ième élément est gratuit. Inconvénient : le nombre d'éléments est gé, on ne peut pas le changer. Voir l'aide mémoire pour la liste des fonctions les plus importantes sur les tableaux. À cause du typage fort (ou grâce à celui-ci suivant le point de vue), tous les éléments d'un tableau doivent avoir le même type!

Exemple 9 2.7 Le type 'a 'b C'est le type des fonctions, ou plutôt ce sont les types des fonctions. En Python il n'y a qu'un seul type pour toutes les fonctions mais le typage fort interdit totalement ceci en Caml. On peut dénir des fonctions en Caml avec le mot clé function (c'est l'équivalent du lambda de Python) mais on a déjà vu qu'on pouvait dénir des variables, et donc en particulier des fonctions, avec le mot-clé let, voire avec let rec dans le cas des fonctions récursives. On en reparle dans la section suivante. Exemple 10

2.8 Le type unit C'est le type de "rien". L'astuce utilisée en informatique pour dire qu'une fonction ne renvoie rien, c'est de dire que cette fonction renvoie quelque chose, qui est "rien", et qu'on note () en Caml. Exemple 11 En général, une fonction qui ne renvoie rien fait quand même quelque chose quelque part : on dit qu'elle a un eet de bord. Un exemple d'eet de bord facile à illustrer c'est l'écriture sur un chier ou l'achage sur la sortie standard. Exemple 12 3 Quelques aspects impératifs 3.1 Dénition d'une variable On l'a vu, pour dénir une variable on utilise le mot-clé let. Pour une variable local c'est let... in... et pour une variable qui est une fonction dénie récursivement c'est let Exemple 13 On commence par des petits exemples simples : rec.

Exemple 14 On reste modeste : 3.2 Dénitions simultanées et récursivité croisée On peut dénir des variables simultanément à l'aide du mot-clé and. Encore faut-il que cela ait un sens. Exemple 15 Un exemple où ça n'a pas de sens et où il faut emboîter les let... in : Quel intérêt alors? Exemple 16 Un exemple où on doit utiliser le and : la récursivité croisée. 3.3 Modication d'une variable Bien sûr, l'intérêt d'une variable en programmation impérative c'est d'être modiée à chaque instant. Et là il y a, comment dire, une mauvaise nouvelle : On ne peut pas modier une variable locale en Caml.

Ce n'est pas une blague, on ne peut vraiment pas modier la valeur d'une variable en Caml, c'est un aspect fonctionnel de Caml. Heureusement, il y a aussi une bonne nouvelle : On peut modier la valeur d'une référence en Caml. Une référence c'est quoi? C'est essentiellement la même chose qu'un pointeur. Autrement dit : c'est l'adresse mémoire d'une case où il y a quelque chose. Lorsqu'on dénit une variable qui est une référence, on ne pourra jamais modier la valeur de cette variable donc l'adresse mémoire de la case où il y a quelque chose ne pourra jamais être changée. Par contre, on peut modier le contenu de la case. Exemple 17 3.4 Boucles! Caml n'étant pas un langage purement fonctionnel, on peut heureusement! y écrire des boucles for et while. La syntaxe est rappelée dans l'aide-mêmoire. Exemple 18

Remarque 1 Pas de sortie de boucle anticipée en Caml. Si on veut en faire quand même, on peut contourner cette particularité en rattrapant une exception. On y reviendra. 3.5 Structures conditionnelles On a déjà insisté sur l'ecacité de Caml pour faire du ltrage (pattern matching) à l'aide du mot-clé match. On peut totalement se passer des if quitte à utiliser des ltrages avec garde match... when... Il existe toutefois un if un Caml qui s'utilise avec la syntaxe if condition then instruction1 else instruction2. Exemple 19 Attention, après le then et après le else, on doit ne mettre qu'une seule instruction! C'est encore un aspect fonctionnel de Caml. Si on veut en mettre plusieurs, le plus lisible pour le correcteur est d'utiliser la syntaxe begin... end. Exemple 20