summaryrefslogtreecommitdiffhomepage
path: root/fr-fr/wolfram-fr.html.markdown
blob: 4cc9045e3f89492b92ffaf58e9c27042673910db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
---
language: wolfram
contributors:
    - ["hyphz", "http://github.com/hyphz/"]
translators:
    - ["altaris", "http://github.com/altaris/"]
filename: learnwolfram-fr.nb
lang: fr-fr
---

Le langage Wolfram est utilisé dans les programmes suivants :
* La ligne de commandes interactive noyau du Raspberry Pi, mais elle ne peut pas
gérer des éléments graphiques.
* _Mathematica_, un éditeur de texte riche spécialisé pour les mathématiques :
appuyer sur `Shift + Entrée` dans une cellule de code crée un nouvelle cellule
contenant le résultat.
* _Wolfram Wokbench_, une variante d'Eclipse spécialisée pour le langage
Wolfram.

Ce code d'exemple peut être utilisé et modifié dans ces logiciels. Cependant, le
copier-coller directement dans Mathematica peut causer des problèmes de
formatage, car il ne contient aucune information de mise en page.

```mathematica
(* Ceci est un commentaire *)

(* Dans Mathematica, au lieu d'utiliser ces commentaires, vous pouvez créer des
   cellules de texte et insérer de jolies images *)

(* Saisissez une opération et appuyez sur Shift + Entrée pour obtenir le
   résultat *)
2*2              (* 4 *)
5+8              (* 13 *)

(* Appels de fonction *)
Sin[Pi/2]        (* 1 *)
(* Syntaxe alternative pour les appels de fonction à 1 paramètre *)
Sin@(Pi/2)       (* 1 *)
(Pi/2) // Sin    (* 1 *)

(* Attention : le langage est sensible à la casse ! *)

(* Toutes les expressions sont en réalité des appels de fonction *)
Times[2, 2]      (* 4 *)
Plus[5, 8]       (* 13 *)

(* Utiliser une variable pour la première fois la déclare globalement *)
x = 5            (* 5 *)
x == 5           (* True, l'assignation et le test d'égalité est écrit comme
                    en C *)
x                (* 5 *)
x = x + 5        (* 10 *)
x                (* 10 *)
Set[x, 20]       (* TOUT est un appel de fonction, TOUUUUUUUUT *)
x                (* 20 *)

(* Le langage Wolfram effectue des manipulations symboliques, donc utiliser des
   variables non déclarées est légal *)
truc + 5         (* 5 + truc, comme truc n'est pas déclarée, l'évaluation
                    s'arrête là *)
truc + 5 + 10    (* 15 + truc, on évalue ce qu'on peut... *)
%                (* 15 + truc, % représente le dernier résultat *)
% - truc         (* 15, les variables non déclarées peuvent quand même
                    s'annuler *)
chose = truc + 5 (* Attention : chose est ici une expression et non un nombre *)

(* Déclaration d'une fonction *)
Double[x_] := x * 2     (* Le symbole := empêche l'évaluation immédiate du terme
                           à droite *)
Double[10]              (* 20 *)
Double[Sin[Pi/2]]       (* 2 *)
Double @ Sin @ (Pi/2)   (* 2, Utiliser @ évite les paquets de crochets
                           fermants si moches *)
(Pi/2) // Sin // Double (* 2, Utiliser // permet d'écrire les fonctions dans
                           l'ordre d'appel *)

(* En programmation impérative, utiliser ; pour séparer les expressions *)
Salut[] := (Print@"Hello"; Print@"World")  (* Les parenthèses sont nécessaires
                                              car ; est prioritaire sur := *)
Salut[]                                    (* Hello World *)

(* Boucles For à la C *)
Compter[x_] := For[y=0, y<x, y++, (Print[y])]  (* L'évaluation des boucles For
                                                  se fait comme en C *)
Compter[5]                                     (* 0 1 2 3 4 *)

(* Boucles While *)
x = 0; While[x < 2, (Print@x; x++)]     (* De nouveau, comme en C *)

(* Expressions conditionnelles et If *)
x = 8; If[x==8, Print@"Huit", Print@"Pas huit"] (* If [condition, si vrai,
                                                   si faux] *)
Switch[x, 2, Print@"Deux", 8, Print@"Huit"]     (* Switch par valeur *)
Which[x==2, Print@"Deux", x==8, Print@"Huit"]   (* Switch du type if, else if,
                                                   else if, ..., else *)

(* Les variables autres que les paramètres de fonctions sont par défaut
   globales, même à l'intérieur des fonctions *)
y = 10             (* 10, y est une variable globale *)
Compter[5]         (* 0 1 2 3 4 *)
y                  (* 5, y a été modifiée par Compter *)
x = 20             (* 20, x est une variable globale *)
Compter[5]         (* 0 1 2 3 4 *)
x                  (* 20, dans Compter, le paramètre x masque la variable
                      globale x *)

(* La fonction Module permet d'utiliser des variables locales *)
MieuxCompter[x_] := Module[{y}, (For[y=0, y<x, y++, (Print@y)])]
y = 20             (* y est une variable globale *)
MieuxCompter[5]    (* 0 1 2 3 4 *)
y                  (* 20, y n'a pas été modifiée car le y du Module masque le
                          y global. C'est bien mieux comme ça ! *)

(* Module permet de faire des déclarations globales aussi *)
Module[{compte}, compte=0;      (* compte est une variable locale *)
  (Incrementer[] := ++compte);  (* Ce module déclare des fonctions, mais elles
                                   ne sont globales. Elles ont cependant accès
                                   aux variables locales au module. *)
  (Decrementer[] := --compte)]
compte             (* compte, car il n'y a pas de variable globale nommée
                      compte *)
Incrementer[]      (* 1, la fonction utilise la variable compte du module *)
Incrementer[]      (* 2, le précédent appel de Incrementer a modifié compte *)
Decrementer[]      (* 1 *)
compte             (* compte, car il n'existe toujours pas de variable globale
                      nommé compte *)

(* Listes *)
liste = {1, 2, 3, 4}     (* {1, 2, 3, 4} *)
liste[[1]]               (* 1, les indexes commencent à 1 et non 0 !!! *)
Map[Double, liste]       (* {2, 4, 6, 8}, appliquer une fonction à une liste de
                             manière fonctionnelle *)
Double /@ liste          (* {2, 4, 6, 8}, syntaxe abrégée de la ligne
                             précédente *)
Scan[Print, liste]       (* 1 2 3 4, boucle impérative sur une liste *)
Fold[Plus, 0, liste]     (* 10 (0+1+2+3+4) *)
FoldList[Plus, 0, liste] (* {0, 1, 3, 6, 10}, variante de la fonction
                             précédente qui donne aussi les résultats
                             intermédiaires *)
Append[liste, 5]         (* {1, 2, 3, 4, 5}, liste n'est pas modifiée... *)
Prepend[liste, 5]        (* {5, 1, 2, 3, 4}, ... mais elle peut l'être en
                             écrivant "liste = " *)
Join[liste, {3, 4}]      (* {1, 2, 3, 4, 3, 4} *)
liste[[2]] = 5           (* {1, 5, 3, 4}, ceci modifie bien la liste *)

(* Tables associatives, ou dictionnaires *)
table = <|"Vert" -> 2, "Rouge" -> 1|> (* Crée une table associative *)
table[["Vert"]]                       (* 2, l'utilise *)
table[["Vert"]] := 5                  (* 5, la modifie *)
table[["Bleu"]] := 3.5                (* 3.5, l'étend *)
KeyDropFrom[table, "Vert"]            (* Supprime la clé "Vert" *)
Keys[table]                           (* {Rouge, Bleu} *)
Values[table]                         (* {1, 3.5} *)

(* Pour finir, toute bonne démonstration du langage Wolfram contient un
   Manipulate ! *)
Manipulate[y^2, {y, 0, 20}] (* Crée une interface graphique interactive qui
                               affiche y^2, permettant à l'utilisateur de
                               modifier la valeur de y grâce à un contrôle
                               allant de 0 à 20. Ne fonctionne que si le
                               logiciel utilisé gère les éléments graphiques. *)
```

## Envie d'aller plus loin ?

* [Documentation du langage Wolfram (en anglais)](http://reference.wolfram.com/language/)