Micro Systèmes n°48 décembre 1984
Micro Systèmes n°48 décembre 1984
  • Prix facial : 24 F

  • Parution : n°48 de décembre 1984

  • Périodicité : mensuel

  • Editeur : Société Parisienne d'Edition

  • Format : (203 x 271) mm

  • Nombre de pages : 246

  • Taille du fichier PDF : 187 Mo

  • Dans ce numéro : MSX... un nouveau standard ?

  • Prix de vente (PDF) : gratuit

Dans ce numéro...
< Pages précédentes
Pages : 148 - 149  |  Aller à la page   OK
Pages suivantes >
148 149
LISP:LANGAGE DE rINTELLIGENCE ARTIFICIELLE (I) DES ATOMES ET DES LISTES Dès l'origine de Lisp, son histoire est confondue avec celle de l'Intelligence Artificielle qui en a fait son langage de prédilection. En effet, Lisp occupe une place très particulière au sein de l'informatique. Malgré son âge — Lisp a été conçu en 1960 à la même époque que Fortran —, et son extrême importance pour tout un domaine de l'informatique, il est resté marginal pendant très longtemps. Durant les années 1960 et 1970, la plupart des informaticiens le boudent : les demandes en informatique se situent alors plus dans le domaine du calcul scientifique, où Fortran règne en maître, et celui de la gestion, où Cobol se taille la part du lion. Entre les deux, Pascal et PL/1 tentent de promouvoir les bienfaits de la programmation structurée, tandis que Basic sert péniblement de langage d'enseignement. Lisp est laissé aux quelques illuminés, nourris de science fiction, qui inventent chimères et mondes artificiels à partir de leur console. Lecture d'une expression Evaluation de l'expression/4isp est en effet un langage de manipulation symbolique. Le comprendre, c'est s'ouvrir au monde de l'Intelligence Artificielle, découvrir les chemins qui ont conduit à l'élaboration des systèmes experts et des analyseurs de langage naturel. C'est pourquoi Artefact se consacrera, au cours de plusieurs numéros, à découvrir, au travers de Lisp, les mécanismes de la programmation en Intelligence Artificielle. Nous présenterons des programmes concrets que vous pourrez tester sur vos propres micro-ordinateurs : systèmes de règles de production, bases de connaissances, analyseurs de grammaire, etc. Vous vous initierez ainsi à la programmation symbolique au travers d'exemples puissants mais simples à comprendre. Les premiers pas Au début, Lisp est un langage déroutant. Sa syntaxe fait un usage démesuré de parenthèses qui rebute le débutant comme le programmeur che- vronné, spécialiste de Fortran, Basic ou Pascal. Lisp est un langage qui favorise la programmation interactive. Plus besoin d'attendre de longues et fastidieuses compilations : tout ce qui est entré au clavier est exécuté immédiatement. Après chaque réponse, l'ordinateur affiche le caractère « ? qui signifie qu'il est prêt à recevoir de nouvelles instructions. La figure 1 montre l'algorithme général d'exécution en Lisp : il s'agit d'une boucle sans fin au cours de laquelle les expressions, lues généralement au clavier, sont évaluées, leur résultat étant systématiquement imprimé. La syntaxe du langage est très simple et se réduit au minimum : les expressions sont toujours entourées de parenthèses (ce sont donc des listes) et les opérateurs sont placés devant les arguments. Ces deux règles suffisent à rendre compte des contraintes syntaxiques. L'addition de deux nombres s'effectue ainsi : ? (+ 2 3) = 5 Impression du résultat hg. I. - L'algorithme général d'exécution de Lisp. Toutes les expressions sont lues au clavier, ou à partir d'un fichier, puis évaluées ; le résultat est ensuite affiché. Il s'agit d'un traitement de type lecture, évaluation, impression ». De même, l'addition de deux nombres résultant de deux multiplications sera donnée sous la forme : ? (+ (* 3 4) (* 2 5)) = 120 Lisp est utilisé en Intelligence Artificielle, non pas tant Décembre 1984
pour ses qualités arithmétiques, mais pour ses capacités à manipuler des symboles sous la forme d'atomes et de listes. Un atome est un élément insécable du langage (d'où le nom d'atome), c'est-à-dire soit un nom, soit un nombre. Par exemple, PIERRE, JEUDI et 45 sont des atomes. Ils peuvent être combinés ensemble pour former des listes, suites ordonnées d'atomes ou de listes. Par exemple : (PIERRE AIME MARIE) est une liste composée de trois atomes, et (a (b c) (d)) est une liste définie par un atome et deux listes. Ainsi une liste, c'est une parenthèse ouvrante, une suite de choses (atomes ou listes) et une parenthèse fermante. Toutes les structures de données se ramènent à la construction de ces listes constituées aussi bien d'atomes que de listes (en réalité, les Lisp modernes introduisent d'autres structures de données : tableaux, chaînes de caractères, etc. ; néanmoins, la structure de liste y joue toujours un rôle prépondérant). Trois opérations fondamentales suffisent pour, en les combinant les unes avec les autres, décrire l'ensemble des manipulations qui peuvent être effectuées sur une liste. Ces trois opérations fondamentales sont CAR, CDR et CONS, qui permettent respectivement de prendre le premier élément d'une liste, le reste d'une liste privée de son premier élément et de placer un élément en tête de liste. Les termes CAR et CDR sont dus aux noms des registres de l'ordinateur qui a servi à la première implémentation du langage. Depuis, les termes sont restés, même s'ils ne correspondent plus à une réalité. Voici quelques exemples de fonctionnement des opérations CAR et CDR : ? (car'(lundi mardi mercredi)) = lundi ? (cdr'(lundi mardi mercredi)) = (mardi mercredi) Le caractère apostrophe (') placé devant la liste indique qu'il s'agit d'une donnée et non d'une expression à évaluer. En réalité, ce caractère est une fonction : QUOTE, sorte de fonction identité qui n'évalue pas son argument et le transmet tel quel à la suite du calcul. Ainsi,'(a b c) est équivalent à (quote (a b c)). Cette fonction est un peu délicate à comprendre. Il suffit simplement de noter qu'il faut faire précéder les données du caractère apostrophe et non les expressions. Si CAR permet d'obtenir le premier élément d'une liste, comment récupérer le second ou le troisième ? Il suffit de combiner adroitement les deux opérations CAR et CDR. Puisque CDR retourne une liste privée de son premier élément, prendre le CAR de cette liste revient à prendre le deuxième élément de la liste de départ. Par exemple : ? (car (cdr'(lundi mardi mercredi))) = mardi de même : ? (car (cdr (cdr'(a b c))) =c Alors que les deux opérations CAR et CDR servent à accéder aux éléments d'une liste, CONS permet de construire des listes. Cet opérateur prend un élément et une liste, et ajoute cet élément en tête de la liste : ? (cons'lundi'(mardi mercredi)) = (lundi mardi mercredi) ? (cons'(lundi mardi)'(mercredi)) = ((lundi mardi) mercredi) Dans le second cas, la liste retournée est constituée de deux éléments, le premier étant lui-même une liste de deux atomes. CONS agit exactement à l'opposé de CAR et CDR. Autre opération de construction de liste, APPEND prend deux listes et les met bout à bout : ? (append'(lundi mardi)'(mercredi jeudi)) = (lundi mardi mercredi jeudi) Utiliser Lisp de cette manière ne permettrait pas de construire des programmes très élaborés. Les programmes Lisp sont écrits à l'aide de fonctions décrites par l'utilisateur en termes de fonctions plus élémentaires, les primitives. Les opérations CAR, CDR, CONS et APPEND ainsi que les différents opérateurs mathémati- ques (+, *, etc.) sont quel- ques-unes de ces primitives. Un bon système Lisp comprend 100 à 500 de ces primitives. Heureusement, il n'est pas nécessaire d'en connaître plus d'une douzaine pour débuter. Programmer en Lisp consiste à définir des fonctions qui seront ensuite utilisées comme de simples primitives. Lisp peut se comparer à un jeu de construction (une « boule d'argile » disent les Anglo-Saxons) dans lequel les briques de base sont les primitives du langage. Avec ces primitives, il est possible de construire des unités plus complexes qui seront ensuite utilisées comme des primitives pour l'élaboration de fonctions plus générales. Programmer revient donc à augmenter le vocabulaire de base du langage pour créer des environnements de programmation de plus en plus riches. Définir de nouvelles fonctions impose une modularité du logiciel en le découpant en petits modules autonomes, qui prennent des valeurs sous la forme d'arguments, effectuent une tâche en appelant généralement d'autres fonctions, et retournent un résultat. Par exemple, voici une fonction qui réalise le produit de deux nombres : (de produit (x y) (x y)) Le mot DE indique qu'il s'agit de la création d'une fonction, intitulée PRODUIT, et définie comme le produit d'un nombre avec lui-même. Juste après le nom de la fonction se trouve une liste de variables : X et Y sont les arguments de la fonction, et servent à désigner les valeurs qui, lors de l'appel de la fonction, se substitueront à ces variables et interviendront dans le calcul afin de produire un résultat. Lors de l'appel de la fonction, les arguments seront remplacés par des valeurs réelles. Par exemple : ? (produit 2 3) =6 De même, voici la définition et l'emploi d'une fonction qui réalise l'élévation au carré d'un nombre : ? (de carre (x) = carre (* x x)) ? (carre 4) = 16 CARRE peut ensuite être employée pour définir d'autres fonctions. Ainsi, CUBE se dé- crit comme le produit d'un nombre par son carré : ? (de cube (x) = cube ? (cube 4) = 64 (* x (carre x))) Les primitives de manipula- tion de listes peuvent être com- binées pour définir de nouvelles fonctions de traitement symbo- lique. Par exemple, la fonction DEUX qui prend le deuxième élément de la liste pourrait se définir ainsi : ? (de deux (liste) = deux (car (cdr liste))) ? (deux'(a b c d)) =b et TROIS : ? (de trois (x) = trois (car (cdr (cdr liste)))) ? (trois'(a b c d)) =c Tests et prédicats Il est indispensable de pouvoir déterminer le type des valeurs passées en arguments, par exemple savoir s'il s'agit d'un atome ou d'une liste, et de comparer des valeurs entre elles. Ces opérations sont prises en charge par des fonctions intégrées au langage, qui se nomment prédicats. ATOM et LISTP sont deux primitives inverses l'une de l'autre qui servent à indiquer si une valeur est un symbole ou une liste. A cet effet, Lisp utilise une logique particulière : tout ce qui n'est pas faux est vrai. Non, il ne s'agit pas d'une évidence. Cet aphorisme rend compte d'un mode particulier du traitement des valeurs vraies et fausses en Lisp : le faux est dénoté par la liste vide, représentée par (), ou l'atome NIL. Le vrai est dénoté par l'atome T (pour « true » en anglais), mais aussi par n'importe quelle valeur différente de () ou de NIL. Voici comment fonctionnent les tests ATOM et LISTP. L'expression (ATOM X) retourne la valeur vraie si X est un symbole et () autrement, et (LISTP X) produira l'effet inverse en retournant T si X est une liste et () dans le cas contraire. Par exemple : ? (atom'(a b)) = ? (atom'a) =t ? (listp'(a b)) =t ? (listp'a) = Les opérations de comparai- son sont elles aussi réalisées à l'aide de fonctions. Par exem- ple, le test de l'égalité de deux nombres s'effectue ainsi : ? (= 3 3) =t ? (= 2 3) = Décembre 1984 MICRO-SYSTEMES — 149



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 48 décembre 1984 Page 1Micro Systèmes numéro 48 décembre 1984 Page 2-3Micro Systèmes numéro 48 décembre 1984 Page 4-5Micro Systèmes numéro 48 décembre 1984 Page 6-7Micro Systèmes numéro 48 décembre 1984 Page 8-9Micro Systèmes numéro 48 décembre 1984 Page 10-11Micro Systèmes numéro 48 décembre 1984 Page 12-13Micro Systèmes numéro 48 décembre 1984 Page 14-15Micro Systèmes numéro 48 décembre 1984 Page 16-17Micro Systèmes numéro 48 décembre 1984 Page 18-19Micro Systèmes numéro 48 décembre 1984 Page 20-21Micro Systèmes numéro 48 décembre 1984 Page 22-23Micro Systèmes numéro 48 décembre 1984 Page 24-25Micro Systèmes numéro 48 décembre 1984 Page 26-27Micro Systèmes numéro 48 décembre 1984 Page 28-29Micro Systèmes numéro 48 décembre 1984 Page 30-31Micro Systèmes numéro 48 décembre 1984 Page 32-33Micro Systèmes numéro 48 décembre 1984 Page 34-35Micro Systèmes numéro 48 décembre 1984 Page 36-37Micro Systèmes numéro 48 décembre 1984 Page 38-39Micro Systèmes numéro 48 décembre 1984 Page 40-41Micro Systèmes numéro 48 décembre 1984 Page 42-43Micro Systèmes numéro 48 décembre 1984 Page 44-45Micro Systèmes numéro 48 décembre 1984 Page 46-47Micro Systèmes numéro 48 décembre 1984 Page 48-49Micro Systèmes numéro 48 décembre 1984 Page 50-51Micro Systèmes numéro 48 décembre 1984 Page 52-53Micro Systèmes numéro 48 décembre 1984 Page 54-55Micro Systèmes numéro 48 décembre 1984 Page 56-57Micro Systèmes numéro 48 décembre 1984 Page 58-59Micro Systèmes numéro 48 décembre 1984 Page 60-61Micro Systèmes numéro 48 décembre 1984 Page 62-63Micro Systèmes numéro 48 décembre 1984 Page 64-65Micro Systèmes numéro 48 décembre 1984 Page 66-67Micro Systèmes numéro 48 décembre 1984 Page 68-69Micro Systèmes numéro 48 décembre 1984 Page 70-71Micro Systèmes numéro 48 décembre 1984 Page 72-73Micro Systèmes numéro 48 décembre 1984 Page 74-75Micro Systèmes numéro 48 décembre 1984 Page 76-77Micro Systèmes numéro 48 décembre 1984 Page 78-79Micro Systèmes numéro 48 décembre 1984 Page 80-81Micro Systèmes numéro 48 décembre 1984 Page 82-83Micro Systèmes numéro 48 décembre 1984 Page 84-85Micro Systèmes numéro 48 décembre 1984 Page 86-87Micro Systèmes numéro 48 décembre 1984 Page 88-89Micro Systèmes numéro 48 décembre 1984 Page 90-91Micro Systèmes numéro 48 décembre 1984 Page 92-93Micro Systèmes numéro 48 décembre 1984 Page 94-95Micro Systèmes numéro 48 décembre 1984 Page 96-97Micro Systèmes numéro 48 décembre 1984 Page 98-99Micro Systèmes numéro 48 décembre 1984 Page 100-101Micro Systèmes numéro 48 décembre 1984 Page 102-103Micro Systèmes numéro 48 décembre 1984 Page 104-105Micro Systèmes numéro 48 décembre 1984 Page 106-107Micro Systèmes numéro 48 décembre 1984 Page 108-109Micro Systèmes numéro 48 décembre 1984 Page 110-111Micro Systèmes numéro 48 décembre 1984 Page 112-113Micro Systèmes numéro 48 décembre 1984 Page 114-115Micro Systèmes numéro 48 décembre 1984 Page 116-117Micro Systèmes numéro 48 décembre 1984 Page 118-119Micro Systèmes numéro 48 décembre 1984 Page 120-121Micro Systèmes numéro 48 décembre 1984 Page 122-123Micro Systèmes numéro 48 décembre 1984 Page 124-125Micro Systèmes numéro 48 décembre 1984 Page 126-127Micro Systèmes numéro 48 décembre 1984 Page 128-129Micro Systèmes numéro 48 décembre 1984 Page 130-131Micro Systèmes numéro 48 décembre 1984 Page 132-133Micro Systèmes numéro 48 décembre 1984 Page 134-135Micro Systèmes numéro 48 décembre 1984 Page 136-137Micro Systèmes numéro 48 décembre 1984 Page 138-139Micro Systèmes numéro 48 décembre 1984 Page 140-141Micro Systèmes numéro 48 décembre 1984 Page 142-143Micro Systèmes numéro 48 décembre 1984 Page 144-145Micro Systèmes numéro 48 décembre 1984 Page 146-147Micro Systèmes numéro 48 décembre 1984 Page 148-149Micro Systèmes numéro 48 décembre 1984 Page 150-151Micro Systèmes numéro 48 décembre 1984 Page 152-153Micro Systèmes numéro 48 décembre 1984 Page 154-155Micro Systèmes numéro 48 décembre 1984 Page 156-157Micro Systèmes numéro 48 décembre 1984 Page 158-159Micro Systèmes numéro 48 décembre 1984 Page 160-161Micro Systèmes numéro 48 décembre 1984 Page 162-163Micro Systèmes numéro 48 décembre 1984 Page 164-165Micro Systèmes numéro 48 décembre 1984 Page 166-167Micro Systèmes numéro 48 décembre 1984 Page 168-169Micro Systèmes numéro 48 décembre 1984 Page 170-171Micro Systèmes numéro 48 décembre 1984 Page 172-173Micro Systèmes numéro 48 décembre 1984 Page 174-175Micro Systèmes numéro 48 décembre 1984 Page 176-177Micro Systèmes numéro 48 décembre 1984 Page 178-179Micro Systèmes numéro 48 décembre 1984 Page 180-181Micro Systèmes numéro 48 décembre 1984 Page 182-183Micro Systèmes numéro 48 décembre 1984 Page 184-185Micro Systèmes numéro 48 décembre 1984 Page 186-187Micro Systèmes numéro 48 décembre 1984 Page 188-189Micro Systèmes numéro 48 décembre 1984 Page 190-191Micro Systèmes numéro 48 décembre 1984 Page 192-193Micro Systèmes numéro 48 décembre 1984 Page 194-195Micro Systèmes numéro 48 décembre 1984 Page 196-197Micro Systèmes numéro 48 décembre 1984 Page 198-199Micro Systèmes numéro 48 décembre 1984 Page 200-201Micro Systèmes numéro 48 décembre 1984 Page 202-203Micro Systèmes numéro 48 décembre 1984 Page 204-205Micro Systèmes numéro 48 décembre 1984 Page 206-207Micro Systèmes numéro 48 décembre 1984 Page 208-209Micro Systèmes numéro 48 décembre 1984 Page 210-211Micro Systèmes numéro 48 décembre 1984 Page 212-213Micro Systèmes numéro 48 décembre 1984 Page 214-215Micro Systèmes numéro 48 décembre 1984 Page 216-217Micro Systèmes numéro 48 décembre 1984 Page 218-219Micro Systèmes numéro 48 décembre 1984 Page 220-221Micro Systèmes numéro 48 décembre 1984 Page 222-223Micro Systèmes numéro 48 décembre 1984 Page 224-225Micro Systèmes numéro 48 décembre 1984 Page 226-227Micro Systèmes numéro 48 décembre 1984 Page 228-229Micro Systèmes numéro 48 décembre 1984 Page 230-231Micro Systèmes numéro 48 décembre 1984 Page 232-233Micro Systèmes numéro 48 décembre 1984 Page 234-235Micro Systèmes numéro 48 décembre 1984 Page 236-237Micro Systèmes numéro 48 décembre 1984 Page 238-239Micro Systèmes numéro 48 décembre 1984 Page 240-241Micro Systèmes numéro 48 décembre 1984 Page 242-243Micro Systèmes numéro 48 décembre 1984 Page 244-245Micro Systèmes numéro 48 décembre 1984 Page 246