Il semble y avoir une croyance de longue date (principalement par les non-lispers) que le lisp est meilleur que la plupart des langues de l'IA.
D'où vient cette croyance? Et y a-t-il un fondement à cela?
Il semble y avoir une croyance de longue date (principalement par les non-lispers) que le lisp est meilleur que la plupart des langues de l'IA.
D'où vient cette croyance? Et y a-t-il un fondement à cela?
Réponses:
L'une des principales différences entre les langages de type LISP et les autres langages est que dans les LISP, le code et les données sont la même chose. Cela permet de faire des choses comme avoir un programme à modifier certains de ses algorithmes pendant l'exécution car il "apprend" de nouvelles choses, en tant que partie native du langage.
Un autre aspect qui entre en jeu, mais pas autant, est la capacité de LISP à ajouter facilement de nouvelles sémantiques de langage via des macros. Cela permet en fait d'entrer et de définir une DSL avec laquelle votre IA fonctionne et peut évoluer, avec le potentiel pour que ce langage se développe, s'auto-corrige et évolue pendant que l'IA fonctionne.
En accord avec Quadrescence, l'historique d'utilisation des LISP va beaucoup dans le sens d'une image des LISPs qui est bonne pour l'IA. Pourquoi LISP est-il utilisé pour l'IA couvre l'histoire de manière beaucoup plus détaillée.
Certains des tout premiers programmes de lisp étaient des prouveurs de théorèmes, des mathématiques symboliques, le classique ELIZA, etc. ce lisp est bon pour l'IA.
La DARPA a également financé des universités pour la recherche en IA et acheté des quantités importantes de matériel à Symbolics. La pénurie de fonds a finalement conduit à ce que l'on a appelé "l'hiver de l'IA".
Enfin, les langages originaux comme Fortran (ou «langages» comme ASM) ont été utilisés principalement pour le calcul numérique. Vous avez travaillé avec des nombres et des tableaux d'entre eux. De nos jours, nous avons des symboles, ou la possibilité de créer presque n'importe quel objet que nous aimerions, dans la plupart des langues modernes.
Donc, la raison pour laquelle le lisp était meilleur pour l'IA à un moment donné n'est plus le cas. Cependant, l'idée que "le lisp est bon pour l'IA" est toujours présente.
Que lisp soit ou non un meilleur langage en raison de ses caractéristiques et de sa structure est un tout autre cas (car vraiment ce genre de chose s'applique à de nombreux autres domaines que l'IA, et conduira généralement à une guerre de flamme).
Examinons quelques-uns des programmes d'IA actuels: (1) Robots, par exemple voitures autonomes. Dans le grand défi DARPA, le logiciel de conduite automobile supérieur n'était pas Lisp. Il s'agissait plutôt d'un langage procédural tel que C ++ ou Java. (2) Traduction automatique du langage naturel. Lisp n'est pas utilisé à cette fin par les systèmes de production largement utilisés. (3) Jeu, p.ex. programmes d'échecs. Lisp n'est pas utilisé à cette fin par des programmes d'échecs supérieurs largement utilisés tels que Fritz.
Lisp a été inventé et développé par les laboratoires américains d'IA dans les années 1960 afin de prototyper rapidement des programmes de logique symbolique dans lesquels les structures de données Lisp natives correspondent au niveau d'abstraction symbolique requis - par exemple, les mots anglais pourraient être des symboles dans une liste, les formules logiques pourraient être facilement représentés comme des listes d'opérateurs et d'opérandes.
Mais pour les programmes de production, les avantages de l'ingénierie logicielle des langages typés statiques et d'une grande variété de bibliothèques tierces, signifie que Lisp n'est même pas pris en compte pour les grands systèmes modernes qui effectuent des tâches d'IA.
@Stephen Reed l'a très bien dit. Je peux seulement ajouter que j'étais au MIT AI Lab dans les années 70. J'ai alors entendu une histoire sur l'origine de Lisp. Je ne peux pas jurer que c'est vrai, mais ça se passe comme ceci:
John McCarthy était au MIT dans les années 50, et il avait travaillé sur la démonstration des propriétés des programmes, et pour cela, il avait utilisé une syntaxe simple similaire à Lambda Calculus.
L'histoire était que l'un des étudiants diplômés voulait faire un projet (analogie, ou démonstration de théorème, ou mathématiques symboliques, je ne me souviens pas lequel) et a demandé à McCarthy quelle langue utiliser. La réponse - Fortran bien sûr. (Il n'y avait pas grand-chose d'autre, et le traitement de liste lui-même était assez bien connu à l'époque, mais uniquement en tant que packages de sous-programmes, pas en tant que langues.) Eh bien, cela a conduit à un programme qui traiterait les symboles dans les structures de liste imbriquées. Avec un moyen de les lire et de les imprimer, puis une eval
fonction, et Voila '- une langue. Un langage de traitement LISt. Il a décollé de là.
Pour le type d'algorithmes que nous utilisions à cette époque (et que très peu de gens font encore), il fallait un langage capable de manipuler facilement les expressions symboliques. C'est ce que Lisp était bon. Il y a eu de nombreuses variantes du concept de base, sous différents noms, comme Prolog, Scheme, etc. etc.
L'IA signifie donc beaucoup de choses pour beaucoup de gens, et différentes langues sont bonnes pour différentes choses, mais pour les problèmes qui pourraient être décrits comme une manipulation de symboles, il est difficile de trouver une langue utile qui ne soit pas en quelque sorte issue de Lisp.
Lisp présente des avantages pour les types de choses que l'on appelait l'IA - au moins les choses liées à la logique, à la recherche et à l'analyse qui étaient la plupart de l'IA jusque vers les années 90.
Un avantage majeur de Lisp est son support pour les macros - code comme données, métaprogrammation.
Le ML standard (SML) est un autre langage largement utilisé en IA, par exemple, depuis les années 80. Objective CAML et F # sont des évolutions de SML.
Un avantage majeur de la famille ML (et Haskell, etc.) est la correspondance de motifs. Ceci est probablement également disponible en Lisp, mais via une bibliothèque de métaprogrammation plutôt que intégré dans le langage. Il est également disponible dans Haskell, mais pour le moment du moins, la correspondance de modèles n'est pas courante en dehors des langages de programmation fonctionnels.
J'ai vu des affirmations selon lesquelles LISP est essentiellement un calcul lambda étendu non typé, et ML est fondamentalement un calcul lambda typé étendu. Je n'ai pas la connaissance du calcul lambda typé pour dire avec certitude.
L'IA est également devenue un sujet beaucoup plus large au fil des ans - au point qu'elle a presque complètement disparu. L'exploration de données pourrait être considérée comme un sous-domaine de l'IA. De nombreuses choses sur l'IA (OCR, reconnaissance de discours) ont presque cessé d'être de l'IA - ce ne sont que des applications, comme les autres. Et l'IA est beaucoup plus dépendante du traitement du signal et d'autres types de calcul des nombres qu'elle ne l'était autrefois.
Pour l'OCR et la reconnaissance de la parole, l'IA a toujours été dépendante du traitement du signal et du calcul des nombres. Oui, il y a des contradictions là-dedans ;-) Je ne peux pas donner le poids des choses car je ne sais pas vraiment.
Quoi qu'il en soit, en conséquence, il n'y a probablement pas un seul langage approprié pour même l'ensemble d'une application d'IA moderne - je suppose (pas de connaissance de première main) qu'il y a beaucoup de développement multilingue dans l'IA moderne. Et je peux presque garantir que vous trouverez du C et du C ++ dans certains projets, pour obtenir les performances de calcul des nombres. Je ne serais pas surpris s'il y a beaucoup de Python pour des raisons similaires - avec une bonne bibliothèque numérique, Python peut facilement gérer les tâches de calcul des nombres.
Dans l'une de ces voitures autonomes, j'imagine que le système de vision est écrit dans une langue différente (et fonctionne sur un matériel différent) du système de planification d'itinéraire.