|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Scheme, ça fonctionne - Partie 1 Présentation du langage Scheme Le langage Scheme (prononcez "Skim") a été inventé en 1975 au MIT par Guy Lewis Steele Jr. et Gerald Jay Sussman. Scheme est particulièrement adapté au calcul symbolique, à l'intelligence artificielle, à la recherche en informatique théorique, tout en étant facile d'apprentissage et agréable pour le débutant en programmation. Scheme est un dialecte du langage Lisp, sa syntaxe est donc totalement parenthésée, pas de mots-clés, tout commence par un "(" et tout finit par un ")". Enfin, et c'est probablement le plus important, Scheme privilégie la valeur sur l'action, le quoi sur le comment, le calcul sur la commande. Scheme est le langage idéal si votre projet calcule beaucoup, mais éventuellement, ne fait rien ou presque rien. Installation Le premier Scheme sur Amiga était Scheme.lha (60921 octets) en juillet 1988. Et il est encore d'actualité aujourd'hui. Sinon il y a aussi SIOD.lha, scm.lha et UMBScheme212.lha, tous disponibles sur Aminet dans le répertoire /Dev/Lang. Après décompression de l'archive, lancez l'exécutable, une invite apparaît où vous pouvez entrer une expression que Scheme évaluera. Cette expression est forcément en notation préfixe (opérateur en premier, opérandes ensuite), et complètement parenthésée, pour calculer 1 + 2 ça donne :
L'invite peut être différente de ":=>" mais normalement le système répond toujours 3. Le mieux c'est d'exécuter Scheme dans un Shell KingCON. Pour tester les programmes-exemples il suffit de les copier-coller. Au commencement Au commencement il y a la déclaration, elle se fait avec "define" :
On peut vérifier que "one" vaut bien 1 :
"one" est bien une variable, on peut lui affecter une autre valeur à l'aide de "set!" :
Désormais "one" vaut 2. On peut aussi déclarer des fonctions, ainsi :
Déclare la fonction "succ" qui attend un argument "a" et renvoie a+1. Ensuite, l'application de fonction se fait comme d'habitude, en notation préfixe :
Une autre possibilité indispensable est l'alternative, c'est la fonction "if" qui renvoie son 2e argument si le premier est vrai, ou renvoie son 3e si le premier est faux. Exemple, le "minimum de a et b" c'est "a" si "a" est plus petit que "b", et c'est "b" dans le cas contraire :
Remarquez bien la façon dont les parenthèses sont alignées sur la même colonne, c'est primordial pour la lisibilité. Le point-virgule introduit simplement un commentaire. Le raisonnement Heureusement, l'intérêt de Scheme est de fournir une approche systématique pour des calculs beaucoup plus poussés. Par exemple il y a 7 marches d'escalier devant l'allée de mon immeuble, mais combien de façon ai-je donc de les monter ? Je peux monter 1 marche. Je peux monter 2 marches et même 3 marches à la fois. Mais je ne peux pas monter 4 marches en une seule emjambée. L'astuce c'est que si j'ai déjà monté "n" marches alors il me reste (- 7 n) marches à monter. Donc la première enjambée laisse au choix 6, 5 ou 4 marches à monter. Donc le nombre de façons de monter 7 marches c'est le nombre de façons d'en monter 6 plus celui d'en monter 5 plus celui d'en monter 4. En généralisant le nombre de façons de monter "m" marches c'est le nombre de façons d'en monter (- m 1) plus celui d'en monter (- m 2) plus celui d'en monter (- m 3). Ça c'est pour les cas compliqués, pour les cas simples c'est plus facile, à l'évidence il n'y a qu'une façon de monter 1 marche, 2 d'en monter 2 et 4 d'en monter 3. Ce qui donne :
"res" est simplement une variable qui contient le résultat. Copiez-collez la fonction, et la réponse tant attendue est :
Soit 44 façons de monter 7 marches. Le déroulement La fonction suivante répète "n" fois le bloc "commands".
Maintenant considérons la série (ways m), visiblement le dernier terme de cette série est la somme des 3 précédents. Nous pouvons donc initialiser 3 variables pour les 3 premières marches, et ensuite boucler jusqu'à la m-ième marche.
Le "repeat" effectue la boucle désirée. Le résultat renvoyé est la dernière expression c'est-à-dire "a". Maintenant que vous êtes curieux, vous voulez savoir combien de façons de monter les 1665 marches de la tour Eiffel ? La réponse précise, même sur un simple Amiga 500, avec UMB-Scheme :
Eh oui ! Si vous aviez gagné cette somme à la loterie, vous pourriez acheter une fusée pour Alpha du Centaure, et à la bourse d'Alpha du Centaure vous achèteriez tout l'or de la voie-lactée et assez de briques lego pour construire l'étoile-noire grandeur nature. Et pour être sûr d'avoir du soleil, vous offririez un milliard d'euros pour chaque grain de sable de Saint-Tropez. Et encore là j'ai que des idées de radin... Mais je m'égare. Pour aller plus loin Après les fonctions pourquoi pas les données ? En attendant un prochain article, voici deux bons textes d'introduction à Scheme : mitpress.mit.edu/sicp/. www.scheme.com/tspl2d/index.html. Plus de documentations sur Scheme : www.schemers.org/. www.cs.indiana.edu/scheme-repository/home.html. www.swiss.ai.mit.edu/projects/scheme/.
|