# AP1 · 1 — Valeurs, expressions et noms

## Notre question

Quand nous donnons un autre sens à un nom, que deviennent les valeurs déjà construites ?

> **Repères.** [Slides 3 à 23](https://ap-2026.noce.fr/slides/AP1-reference.html#3) : types de base, noms et immutabilité, tuples et listes. Poly, chap. 1 « Décoller » et chap. 3. Le [poly](https://ap-2026.noce.fr/poly/poly-elixir.pdf)
> reprend ces notions par écrit.

Cet atelier de réserve est autonome : aucune cellule d'un autre notebook
n'est nécessaire. Le parcours principal de la séance est la série de
carnets `ap1-01-expressions.livemd` à `ap1-05-pile-calculatrice.livemd` ;
utilisez cette fiche pour reprendre une notion ou vous entraîner
davantage, selon les indications données en cours.
Nous utilisons le moteur Elixir de Livebook ; l'installation d'Elixir
sur votre système attendra AP6.

Commencez par prévoir le résultat, puis évaluez les cellules de haut en bas.
Écrivez les fonctions demandées dans la cellule indiquée. Gardez une phrase
sur une hésitation ou une découverte dans votre carnet principal.

> 💡 Pour démarrer : Une expression produit une valeur. Un tuple `{:ok, 3}` regroupe une étiquette (l'atome `:ok`) et un nombre. Donner un nouveau sens à un nom ne modifie pas les valeurs déjà construites.

> 💡 Nous préciserons en cours les ateliers à terminer selon notre rythme.
> Les rubriques « Pour aller plus loin » restent facultatives.
> Vos réponses serviront au bilan, sans exercice supplémentaire à inventer.

Les cellules `assert` sont des vérifications fournies : si une condition
est fausse, Livebook montre le résultat obtenu et celui attendu.
Évaluez cet import une fois, puis réévaluez votre code avant ses tests
après chaque modification.

```elixir
import ExUnit.Assertions
```

## Prévoir, puis essayer (2 min)

La dernière expression d'une cellule est son résultat. Avant d'exécuter,
prévoyez les trois valeurs du tuple final dans cette cellule de texte : …

```elixir
unit_price = 7
previous_price = unit_price
unit_price = 5
{unit_price, previous_price, 3 * unit_price}
```

Nous pouvons associer `unit_price` à une nouvelle valeur. Nous n'avons pas
modifié le nombre 7, ni le nom `previous_price` : les valeurs sont immuables.
Modifiez maintenant la première ligne et prévoyez à nouveau le résultat.

## Fabriquer un résultat (4 min)

Trois billets coûtent 7 euros chacun. Calculez le montant dans `total`,
puis construisez `ticket` : un tuple qui contient l'atome `:ok` et ce montant.
L'atome est une étiquette ; les accolades regroupent les deux valeurs.
Remplacez les deux `nil`, qui signalent ici une réponse à écrire.

```elixir
unit_price = 7
quantity = 3
total = nil
ticket = nil
ticket
```

```elixir
assert total == 21
assert ticket == {:ok, 21}
```

## Un cas personnel (2 min)

Dans une nouvelle cellule, choisissez un autre prix et une autre quantité.
Écrivez le résultat attendu avant de calculer. Que donne une quantité nulle ?
Conservez un de ces calculs pour E1 dans le carnet principal.

Pour aller plus loin, comparez `7 / 2`, `div(7, 2)` et `rem(7, 2)`.
Quelle opération faut-il choisir pour partager des billets indivisibles ?

## Garder une trace

Sauvegardez ce notebook dans `entrainement/ap1-valeurs.livemd`,
en dehors du dossier collecté `AP1/`. Retrouvez la notion suivante dans
`ap1-fonctions.livemd` si vous souhaitez poursuivre cet entraînement.
Le parcours principal reste la série `AP1/ap1-01-expressions.livemd`
à `AP1/ap1-05-pile-calculatrice.livemd`, où vous conservez directement
le travail demandé pour le rendu unique du cycle AP1–AP3, le
6 décembre 2026 à 23 h 59 (Paris). Il n'y a pas de deuxième série
de notebooks à rendre.

Un bout de syntaxe oublié ? Les chapitres 1 à 4 du [poly](https://ap-2026.noce.fr/poly/poly-elixir.pdf)
reprennent les formes du langage, chacune avec un exemple et son résultat ;
le cours, lui, se fait dans les carnets.

Pour toute question, vous pouvez me contacter par email :
[aurelien.noce@minesparis.psl.eu](mailto:aurelien.noce@minesparis.psl.eu).
