From c2620053a2695ac891f680301687cb6cf9d867aa Mon Sep 17 00:00:00 2001
From: Emmanuel Coquery <emmanuel.coquery@univ-lyon1.fr>
Date: Wed, 22 Jan 2025 16:23:37 +0100
Subject: [PATCH] TP1

---
 tp/tp1.md | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/tp/tp1.md b/tp/tp1.md
index 91dd6ea..c71ac88 100644
--- a/tp/tp1.md
+++ b/tp/tp1.md
@@ -1,7 +1,5 @@
 # TP1: Découverte du langage OCaml
 
-Version 2024
-
 ## 0. Environnement de travail
 
 Les TPs s'effectueront sous Linux.
@@ -15,7 +13,11 @@ Vérifier que l'extension "OCaml Platform" est installée dans VSCode, l'install
 Créer un fichier `tp1.ml`, ouvrir ce fichier avec Visual Studio Code.
 Le plugin OCaml permet d'exécuter un code sélectionné avec les touches `[Shift] + [Enter]`.
 
-## 1. Premiers pas avec l'interpréteur
+## Partie 1
+
+Quand vous aurez fini cette partie, prévenez votre chargé de TP.
+
+### 1.1. Premiers pas avec l'interpréteur
 
 Lancer l'interpréteur `ocaml` avec la commande
 
@@ -29,9 +31,9 @@ ou simplement
 ocaml
 ```
 
-si `utop` n'est pas installé.
+si `utop` n'est pas installé (sur la machine de l'université, cela veut dire que vous n'avez probablement pas correctement suivi les instructions de [CONFIGURATION.md](../CONFIGURATION.md)).
 
-### 1.1. Types de base
+#### 1.1.1. Types de base
 
 On va commencer par utiliser l'interpréteur comme une calculatrice avancée.
 Dans l'interpréteur, les expressions à calculer **doivent** se terminer par `;;`.
@@ -72,7 +74,7 @@ Les opérateurs de comparaison s'écrivent `=` (attention il y a bien un seul si
 > 3 < 2.0;;
 > ```
 
-### 1.2. Appels de fonction
+#### 1.1.2. Appels de fonction
 
 En OCaml, les appels de fonctions sont sous la forme `f a1 a2 a3` où `f` est la
 fonction et `a1`, `a2` et `a3` sont les arguments (les paramètres effectifs)
@@ -108,7 +110,7 @@ Remarque : les opérateurs en OCaml sont **aussi** des fonctions. En ajoutant de
 > 2 < 3 && "b" < "ab"
 > ```
 
-### 1.3. Variables
+#### 1.1.3. Variables
 
 Pour rappel, la syntaxe des définitions de variables est :
 
@@ -132,7 +134,7 @@ let x2 = x1 *. x1 in
 x2 *. 2.0 ;;
 ```
 
-### 1.4 Conditionnelle
+#### 1.1.4 Conditionnelle
 
 La conditionnelle `if ... then ... else ...` est une **expression** et pas une _instruction_ en OCaml, c'est-à-dire qu'elle a un résultat.
 
@@ -142,7 +144,7 @@ La conditionnelle `if ... then ... else ...` est une **expression** et pas une _
 > (if true then 3 else 5) > 4
 > ```
 
-## 2. Définition de fonctions
+### 1.2. Définition de fonctions
 
 La construction `let` _sans_ le `in` permet de définir des variables _globales_.
 On peut l'utiliser pour définir des fonctions comme suit:
@@ -193,9 +195,9 @@ Cette fonction est utile pour trouver les racines d'un trinôme.
 
 **Dans la suite de ce TP et pour les autres TP**, on écrira _toujours_ un commentaire spécial avant la définition d'une fonction définie globalement. Et on écrira toujours ce **commentaire avant de commencer à coder** la fonction.
 
-## 3. Types somme
+### 1.3. Types somme
 
-### 3.1 Définitions de types somme
+#### 1.3.1 Définitions de types somme
 
 Les types somme en OCaml sont des types dont les valeurs peuvent être construites de différentes manières.
 L'exemple suivant illustre la syntaxe de définition de ces types :
@@ -243,7 +245,7 @@ Remarque: quand on passe plusieurs arguments à un constructeur, ils sont passé
 
 > En utilisant l'interpréteur, indiquer quel est le type de `(3, 5.6)`. Quelle est la différence avec `(3, 5, 6)` ?
 
-### 3.2 Pattern matching
+#### 1.3.2 Pattern matching
 
 OCaml possède la construction `match ... with ...` qui permet de décider de l'expression à évaluer en fonction de la valeur de l'expression indiquée dans le `match`. Par exemple:
 
@@ -290,7 +292,12 @@ On veut implémenter un générateur pour les paroles de la chanson [99 bottles
 > utilisera `match` pour distinguer les cas 0, 1 ou 2 bouteilles du cas général
 > à _n_ bouteilles.
 
-## 4. Récursivité
+Fin de la partie 1.
+Si vous avez fini en séance, prévenez votre chargé de TP qui va vérifier que vous avez compris.
+
+## Partie 2
+
+### 2.1. Récursivité
 
 Dans le cas de fonctions récursives, il faut ajouter le mot clé `rec` après le `let`:
 
@@ -308,7 +315,7 @@ let rec sum_n (n:int): int =
 
 > Écrire une fonction `factorielle` qui calcule le produit des entiers entre 1 et _n_.
 
-## 5. Listes
+### 2.2. Listes
 
 OCaml possède une structure de liste prédéfinie. La liste vide d'écrit `[]` et
 l'ajout en tête de liste est réalisé par l'opérateur `::`. Cet opérateur est
@@ -377,3 +384,5 @@ valeur de liste par cas avec un `match` et fabriquer une liste comme résultat.
 > complètes de la chanson _99 bottles of beer_. On séparera chaque paragraphe du
 > suivant avec "\n\n". Vérifier que la variable a la bonne valeur en l'affichant
 > avec `print_endline chanson_99_bottles;;` .
+
+Fin de la 2eme partie et du TP. Prévenez votre chargé de TP si vous avez fini cette partie en séance.
-- 
GitLab