Micro Systèmes n°49 janvier 1985
Micro Systèmes n°49 janvier 1985
  • Prix facial : 24 F

  • Parution : n°49 de janvier 1985

  • Périodicité : mensuel

  • Editeur : Société Parisienne d'Edition

  • Format : (203 x 271) mm

  • Nombre de pages : 198

  • Taille du fichier PDF : 137 Mo

  • Dans ce numéro : dossier sur l'ordinateur biologique.

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 130 - 131  |  Aller à la page   OK
Pages suivantes >
130 131
(de sommel (lst) (cond ((nulllst) 0) (t (+ (carlst) a) (sommel (cdrlst)))))) I)) (de sommet (lst) (let ((res 0)) (whilelst (setq res (+ res (carlst))) (setq res (cdr res))))) Fig. 5. — Pour effectuer la somme de tous les éléments d'une liste, il es possible d'écrire une fonction dans le style récursif (a), ou bien impératif a l'aide d'un WIIILE (b). Dans ce cas, il est nécessaire de faire appel à une variable locale, définie par le LET, qui contient les résultats intermédiaires. = (lambda (x y) (* x y)) ? apply a'(2 3)) =6 L'emploi le plus fréquent des lambda expressions se situe dans MAPCAR, pour éviter la définition de fonctions inutiles. Par exemple, pour élever tous les éléments d'une liste de nombres au carré, il est possible de créer une fonction CARRE puis de l'appliquer à l'aide d'un MAPCAR : ? (de carre (x) (* x x)) = CARRE ? (mapcar'carre'(2 3 4 5)) = (4 9 16 25) Cependant, si l'on ne désire pas créer de fonction CARRE (si celle-ci ne sert jamais dans la suite du programme, c'est en effet inutile), il est possible d'utiliser une lambda expression à la place de la fonction : ? (mapcar (lambda (x) (* x x))'(2 3 4 5)) = (4 9 16 25) La notion de lambda expression est fondamentale en Lisp, tant du point de vue théorique que pratique. D'une part, elle permet de relier le langage aux développements formels du lambda calcul, d'autre part, elle sert de base d'implantation à la notion de fonction ; en effet, toute fonction Lisp est en réalité une lambda expression attachée au champ FVAL (ou valeur fonctionnelle) d'un atome. Il suffit de demander la valeur de ce champ, à l'aide de la fonction FVAL (ou VALFN selon les versions) : ? (fval'carre) = (lambda (x) (* x x)) 130 — MICRO-SYSTEMES A l'image de la plupart des langages de programmation, Lisp peut disposer de variables locales, distinctes des arguments liés à l'appel de la fonction. Ici encore, la gestion de ces variables locales est déterminée par une fonction, LET, qui permet de créer et d'initialiser de telles variables et de réaliser ainsi un environnement local. A l'entrée du LET, une suite de couples déclare les variables locales qui prennent la valeur des expressions associées. La partie restante du LET est composée d'une liste d'expressions Lisp qui seront évaluées dans cet environnement. Par exemple, dans : ? (de truc (x y) (let ((x (+ * 3)) (Y 0)) (+ x Y))) = truc ? (truc 10 12) = 13 la variable X prend la valeur X + 3, c'est-à-dire 13, et Y est initialisée à 0, rendant inutile et sans effet la valeur 12 passée en argument de TRUC. LET est très utilisée lorsque des variables locales sont nécessaires dans un calcul. Par exemple, pour faire la somme de tous les éléments d'une liste numérique, il suffit de parcourir cette dernière en ajoutant toutes les valeurs les unes aux autres. Comme il est d'usage en Lisp, plusieurs solutions sont possibles  : la première est la forme récursive, présentée figure 5-a ; une deuxième reviendrait à utiliser la fonctionnelle REDUCE décrite précédemment ; enfin, une troisième consiste à adopter un style impératif, plus proche de langages comme Pascal, dans lequel la fonction SOMME2 (fig. 5-b) accomplit sa tâche en utilisant une boucle WHILE et une variable locale RES qui contient les sommes intermédiaires. Construire ses propres structures de contrôle Langage particulièrement flexible, Lisp offre au programmeur la possibilité d'étendre les capacités du langage, en autorisant notamment la création de nouvelles structures de contrôles. Par exemple, la programmation en Intelligence Artificielle consiste très souvent à écrire des interpréteurs de surlangages de Lisp, dédiés à une tâche particulière. Il est alors indispensable de pouvoir développer des structures de données et de contrôles liées aux caractéristiques de ce nouveau langage. L'une de ces facilités, la construction de macrofonctions, permet de transformer la forme superficielle de certaines expressions dépendant d'un surlangage en une forme interne évaluable par Lisp. Les macros sont des sortes de fonctions Lisp (définies à l'aide du mot clé DM et non DE) qui sont évaluées en deux étapes. La première sert essentiellement à construire une forme interne d'une expression passée en argument, qui sera évaluée au cours de la seconde. Le processus se compose donc d'une phase de traduction, ou d'expansion, suivie d'une phase d'évaluation, semblable à celle (dm if (id test vrai faux) (list'cond (list test vrai) (list't faux))) a) (dm if (id test vrai faux)'(cond (,test, vrai) (t, faux))) b) Fig. 6. — La structure de contrôle IF peut être définie à partir de la conditionnelle COND à l'aide d'une macro-fonction (a). La notation » backquote » (') rend l'écriture des macros plus lisible (b). qui a lieu dans les macro-instructions des assembleurs. Autre particularité, les macros passent leur nom mais n'évaluent pas leurs arguments. Il est donc nécessaire de prévoir une variable (nommée ID dans les fonctions présentées ici) qui contiendra le nom de la macro lors de l'appel. Comme nous l'avons signalé, les macrofonctions servent principalement à créer des structures de contrôles non offertes par le langage de base. Par exemple, si l'on ne disposait que de la conditionnelle COND comme structure de contrôle, il serait possible de définir l'instruction IF à l'aide d'une macro, comme le montre la figure 6-a. Par exemple, l'évaluation d'une expression, (if (< a 0) (subi a) (addl a)) qui retourne un nombre ajouté ou diminué d'une unité selon qu'une variable A est positive ou négative se déroulerait comme suit  : au cours de la première étape, les expressions (< a 0), (subi a) et (addl a) sont passées en argument de la macro IF sans être évaluées, puis le corps de la macro est expansé, pour donner la forme plus profonde (cond ((< a 0) (subi a)) (t (addl a)) qui est ensuite évaluée. Une notation bien pratique grâce à laquelle on passe des nombreux LIST et CONS nécessaires à la construction de la forme évaluable, le « backquote », utilisé essentiellement dans la construction des macros. Cette notation construit une liste à partir de tous les éléments sans les évaluer, sauf s'ils sont précédés de (,) ou de (@,). Dans le premier cas, la forme suivant la virgule est évaluée, et placée telle quelle dans la liste en formation. Le second symbole évalue lui aussi l'expression située après, mais supprime un niveau de parenthèses lors de son insertion dans la liste. Par exemple  : ' ? (setq a'(toto riri)) = (toto riri)' ?'(a b, a a) = (a b (toto riri) a) ?'(a b,@a a) = (a b toto riri a) La figure 6-b montre comment il est possible de réécrire la macro IF à l'aide de cette notation  : sa forme plus claire Janvier 1985
(dm for (id var corps)'(let ((,(car var), (cadr var))) (while (<-, (car var), (caddr var)), corps (setq, (cadr var) (1+, (cadr var)))))) ? (for (i 1 5) (print i)) 1 2 3 4 5 LE TRAITEMENT DE TEXTE, MODE D'EMPLOI. ECOUTEZ LE PROGRAMME. Fig. 7. — La structure de contrôle FOR utilise une variable qui est incrémen tée à chaque passage dans la boucle. (dm newl (id at v)'(setq, at (cons, v, at))) (dm nextl (id at y) -(let ((r (car, at))) (setq, at (cdr, at)) r)) Fig. 8. — NEWL et NEXTL sont deux macros qui implémentent l'utilisation d'une pile à partir de listes. la rend ainsi plus compréhensible. L'emploi de ces macros autorise aussi la création de structures de contrôles bien éloignées de l'optique Lisp originale. Par exemple, pour ceux qui ne peuvent se passer de constructions itératives autour d'une variable d'index, la figure 7 montre comment il est possible de définir une instruction FOR qui exécute une suite d'expressions contrôlées par une variable de boucle, à la manière de FOR... NEXT de Basic, ou FOR... DO de Pascal. Les macros peuvent aussi aider à la construction de structures dynamiques ; par exemple, deux instructions inverses l'une de l'autre, NEWL et NEXTL servent à construire des structures de pile à partir de listes. NEWL, qui correspond à l'instruction PUSH ou EMPILE, prend deux arguments, une variable et une valeur, qu'elle rajoute en tête de la variable située à son sommet (instruction POP ou DEPILE) ? (setq a'(toto riri)) = (toto riri) 9 (newl a'fifi) = (fifi toto riri) ? (newl a'truc) = (truc fifi toto riri) ? (nextl a) = truc ? a = (fifi toto riri) Ces fonctions se définissent aisément à l'aide de macrofonc- tions, comme le montre la figure 8. tin langage ouvert Fonctionnelles et macros ne constituent qu'une petite partie de ces constructions destinées à donner plus de puissance d'expression au programmeur  : macrocaractères, échappements, cons marqués, packages, structures de données, programmation orientée objet, etc. contribuent eux aussi à donner à Lisp toute sa richesse. Toutes ces fonctionnalités font de Lisp un langage de plus en plus vivant, de plus en plus présent  : l'Intelligence Artificielle en a fait son langage d'élection (on dit que Lisp est l'assembleur de l'Intelligence Artificielle) ; l'industrie, avec le développement de la Robotique et de la CAO, commence à l'adopter, des ordinateurs ont été construits autour de ce langage (les Machines Lisp) et des efforts de normalisation sont en cours avec la définition d'un standard COM MON LISP. Ainsi, malgré son âge (il a été créé il y a plus de vingt ans), et à cause de sa capacité de traitement symbolique, de sa flexibilité et de ses facultés d'extension, l'importance de Lisp et du style de programmation qu'il inspire s'étend sur des domaines de plus en plus amples de l'informatique. ■ J. FERBER Janvier 1985 Conçu par de grands spécialistes soucieux d'allier performance et simplicité d'utilisation, Océan Text offre toutes les fonctions que l'on peut attendre d'un traitement de texte, notamment un mafler » intégré. Associé à Océan Fiche, Océan Text permet une gestion de fichiers et de rapports particulièrement performante. Océan Text est très facile à utiliser, la méthode audio qui l'accompagne en donne la preuve. Véritable premier assistant polyvalent en matière de traitement de texte, Océan Text s'affirme comme l'outil indispensable aux professionnels d'aujourd'hui. Venez écouter le programme chez Océan Systèmes, 39, rue d'Amsterdam, Paris 8e. Appelez le 874.74.52. NOS LOGICIEI S AIDENT I ES HOMMES A PRENDRE DE L'AVANCE. OCEAN SYSTEMES SERVICE-LECTEURS N°89 MICRO-SYSTEMES — 131



Autres parutions de ce magazine  voir tous les numéros


Liens vers cette page
Couverture seule :


Couverture avec texte parution au-dessus :


Couverture avec texte parution en dessous :


Micro Systèmes numéro 49 janvier 1985 Page 1Micro Systèmes numéro 49 janvier 1985 Page 2-3Micro Systèmes numéro 49 janvier 1985 Page 4-5Micro Systèmes numéro 49 janvier 1985 Page 6-7Micro Systèmes numéro 49 janvier 1985 Page 8-9Micro Systèmes numéro 49 janvier 1985 Page 10-11Micro Systèmes numéro 49 janvier 1985 Page 12-13Micro Systèmes numéro 49 janvier 1985 Page 14-15Micro Systèmes numéro 49 janvier 1985 Page 16-17Micro Systèmes numéro 49 janvier 1985 Page 18-19Micro Systèmes numéro 49 janvier 1985 Page 20-21Micro Systèmes numéro 49 janvier 1985 Page 22-23Micro Systèmes numéro 49 janvier 1985 Page 24-25Micro Systèmes numéro 49 janvier 1985 Page 26-27Micro Systèmes numéro 49 janvier 1985 Page 28-29Micro Systèmes numéro 49 janvier 1985 Page 30-31Micro Systèmes numéro 49 janvier 1985 Page 32-33Micro Systèmes numéro 49 janvier 1985 Page 34-35Micro Systèmes numéro 49 janvier 1985 Page 36-37Micro Systèmes numéro 49 janvier 1985 Page 38-39Micro Systèmes numéro 49 janvier 1985 Page 40-41Micro Systèmes numéro 49 janvier 1985 Page 42-43Micro Systèmes numéro 49 janvier 1985 Page 44-45Micro Systèmes numéro 49 janvier 1985 Page 46-47Micro Systèmes numéro 49 janvier 1985 Page 48-49Micro Systèmes numéro 49 janvier 1985 Page 50-51Micro Systèmes numéro 49 janvier 1985 Page 52-53Micro Systèmes numéro 49 janvier 1985 Page 54-55Micro Systèmes numéro 49 janvier 1985 Page 56-57Micro Systèmes numéro 49 janvier 1985 Page 58-59Micro Systèmes numéro 49 janvier 1985 Page 60-61Micro Systèmes numéro 49 janvier 1985 Page 62-63Micro Systèmes numéro 49 janvier 1985 Page 64-65Micro Systèmes numéro 49 janvier 1985 Page 66-67Micro Systèmes numéro 49 janvier 1985 Page 68-69Micro Systèmes numéro 49 janvier 1985 Page 70-71Micro Systèmes numéro 49 janvier 1985 Page 72-73Micro Systèmes numéro 49 janvier 1985 Page 74-75Micro Systèmes numéro 49 janvier 1985 Page 76-77Micro Systèmes numéro 49 janvier 1985 Page 78-79Micro Systèmes numéro 49 janvier 1985 Page 80-81Micro Systèmes numéro 49 janvier 1985 Page 82-83Micro Systèmes numéro 49 janvier 1985 Page 84-85Micro Systèmes numéro 49 janvier 1985 Page 86-87Micro Systèmes numéro 49 janvier 1985 Page 88-89Micro Systèmes numéro 49 janvier 1985 Page 90-91Micro Systèmes numéro 49 janvier 1985 Page 92-93Micro Systèmes numéro 49 janvier 1985 Page 94-95Micro Systèmes numéro 49 janvier 1985 Page 96-97Micro Systèmes numéro 49 janvier 1985 Page 98-99Micro Systèmes numéro 49 janvier 1985 Page 100-101Micro Systèmes numéro 49 janvier 1985 Page 102-103Micro Systèmes numéro 49 janvier 1985 Page 104-105Micro Systèmes numéro 49 janvier 1985 Page 106-107Micro Systèmes numéro 49 janvier 1985 Page 108-109Micro Systèmes numéro 49 janvier 1985 Page 110-111Micro Systèmes numéro 49 janvier 1985 Page 112-113Micro Systèmes numéro 49 janvier 1985 Page 114-115Micro Systèmes numéro 49 janvier 1985 Page 116-117Micro Systèmes numéro 49 janvier 1985 Page 118-119Micro Systèmes numéro 49 janvier 1985 Page 120-121Micro Systèmes numéro 49 janvier 1985 Page 122-123Micro Systèmes numéro 49 janvier 1985 Page 124-125Micro Systèmes numéro 49 janvier 1985 Page 126-127Micro Systèmes numéro 49 janvier 1985 Page 128-129Micro Systèmes numéro 49 janvier 1985 Page 130-131Micro Systèmes numéro 49 janvier 1985 Page 132-133Micro Systèmes numéro 49 janvier 1985 Page 134-135Micro Systèmes numéro 49 janvier 1985 Page 136-137Micro Systèmes numéro 49 janvier 1985 Page 138-139Micro Systèmes numéro 49 janvier 1985 Page 140-141Micro Systèmes numéro 49 janvier 1985 Page 142-143Micro Systèmes numéro 49 janvier 1985 Page 144-145Micro Systèmes numéro 49 janvier 1985 Page 146-147Micro Systèmes numéro 49 janvier 1985 Page 148-149Micro Systèmes numéro 49 janvier 1985 Page 150-151Micro Systèmes numéro 49 janvier 1985 Page 152-153Micro Systèmes numéro 49 janvier 1985 Page 154-155Micro Systèmes numéro 49 janvier 1985 Page 156-157Micro Systèmes numéro 49 janvier 1985 Page 158-159Micro Systèmes numéro 49 janvier 1985 Page 160-161Micro Systèmes numéro 49 janvier 1985 Page 162-163Micro Systèmes numéro 49 janvier 1985 Page 164-165Micro Systèmes numéro 49 janvier 1985 Page 166-167Micro Systèmes numéro 49 janvier 1985 Page 168-169Micro Systèmes numéro 49 janvier 1985 Page 170-171Micro Systèmes numéro 49 janvier 1985 Page 172-173Micro Systèmes numéro 49 janvier 1985 Page 174-175Micro Systèmes numéro 49 janvier 1985 Page 176-177Micro Systèmes numéro 49 janvier 1985 Page 178-179Micro Systèmes numéro 49 janvier 1985 Page 180-181Micro Systèmes numéro 49 janvier 1985 Page 182-183Micro Systèmes numéro 49 janvier 1985 Page 184-185Micro Systèmes numéro 49 janvier 1985 Page 186-187Micro Systèmes numéro 49 janvier 1985 Page 188-189Micro Systèmes numéro 49 janvier 1985 Page 190-191Micro Systèmes numéro 49 janvier 1985 Page 192-193Micro Systèmes numéro 49 janvier 1985 Page 194-195Micro Systèmes numéro 49 janvier 1985 Page 196-197Micro Systèmes numéro 49 janvier 1985 Page 198