J'ai appris à utiliser LISP pour élargir mes horizons, car j'ai entendu dire qu'il était utilisé dans la programmation en intelligence artificielle. Après avoir fait quelques recherches, je n’ai pas encore trouvé d’exemples d’IA ni d’autres éléments du langage qui le rendraient plus enclin à le faire.
Le LISP était-il utilisé par le passé parce qu'il était disponible ou y a-t-il quelque chose qui me manque?
Le LISP était utilisé dans l'IA jusqu'à la fin des années 1980. Cependant, dans les années 80, Common LISP était survendu dans le monde des affaires en tant que "langage de l'IA"; la réaction a forcé la plupart des programmeurs d'intelligence artificielle à utiliser C++ pendant quelques années. De nos jours, les prototypes sont généralement écrits dans un langage dynamique plus récent (Perl, Python, Ruby, etc.) et la mise en œuvre de recherches réussies est généralement en C ou C++ (parfois en Java).
Si vous êtes curieux à propos des années 70 ... eh bien, je n'étais pas là. Mais je pense que le LISP a été un succès dans la recherche sur l'IA pour trois raisons (par ordre d'importance):
Je n'ai pas ancien livre sur l'IA de Peter Norvig , mais c'est supposé être un bon moyen d'apprendre à programmer des algorithmes d'IA dans LISP.
Avertissement: Je suis un étudiant diplômé en linguistique informatique. Je connais beaucoup mieux le sous-domaine du traitement du langage naturel que les autres domaines. Peut-être que LISP est utilisé davantage dans d'autres sous-champs.
LISP est utilisé pour l'intelligence artificielle car il prend en charge la mise en œuvre d'un logiciel qui calcule très bien avec les symboles. Les symboles, les expressions symboliques et l'informatique avec ceux-ci sont au cœur du LISP.
Les domaines d’intelligence artificielle typiques de l’informatique par symboles étaient/sont: calcul formel, démonstration de théorèmes, systèmes de planification, diagnostic, systèmes de réécriture, représentation et raisonnement des connaissances, langages logiques, traduction automatique, systèmes experts, etc.
Il n’est donc pas surprenant que de nombreuses applications d’IA renommées dans ces domaines aient été écrites en LISP:
Des milliers d'applications dans ces domaines sont écrites dans LISP. Le plus souvent, c’est qu’ils ont besoin de capacités spéciales dans le domaine du traitement symbolique. L'un implémente des langages spéciaux dotés d'interprètes/compilateurs spéciaux dans ces domaines, en plus du LISP. LISP permet de créer des représentations pour des données et des programmes symboliques et peut implémenter toutes sortes de machines pour manipuler ces expressions (formules mathématiques, formules logiques, plans, ...).
(Notez que de nombreux autres langages de programmation à usage général sont également utilisés dans l'IA. J'ai essayé de vous expliquer pourquoi LISP est surtout utilisé dans l'IA.)
Une des raisons est qu'il vous permet d'étendre le langage avec des constructions spécifiques à votre domaine, ce qui en fait un langage spécifique à un domaine. Cette technique est incroyablement puissante car elle permet de raisonner sur la problème vous résolvez, plutôt que de mélanger des morceaux.
Mon hypothèse a toujours été que, étant un langage fonctionnel, il ne fait pas la différence entre code et données. Tout, y compris les définitions de fonction et les appels de fonction, peut être traité comme une liste et modifié comme n'importe quel autre élément de données.
Ainsi, le code auto-vérifiant et auto-modifiable pourrait être écrit facilement.
Une réponse possible est que l'IA est un ensemble de problèmes très difficiles et que LISP est un bon langage pour résoudre des problèmes difficiles, pas seulement l'IA.
Les macros, les fonctions génériques et la riche introspection permettent un code concis et une introduction facile des abstractions de domaine. C'est un langage que vous pouvez rendre plus puissant. Pour beaucoup de problèmes, c'est inutile et cela a ses propres coûts, mais pour d'autres problèmes, il faut de l'énergie pour progresser.
Je pense que c'est faux de penser à cela uniquement en termes d'IA. Des choses comme l'IA en hiver et les effets commerciaux sur le LISP commun gênent si vous demandez pourquoi il était utilisé pour l'IA, pas pourquoi il n'est pas souvent utilisé maintenant ...
Quoi qu'il en soit, je pense que c'est parce que la plupart du code d'intelligence artificielle était essentiellement un code de recherche. LISP est un excellent langage pour la programmation exploratoire, pour la mise en œuvre d'algorithmes difficiles, pour le code auto-modificateur et souvent modifié. En d'autres termes, pour le code de recherche.
J'utilise aujourd'hui LISP pour certains de mes codes de recherche (mathématiques, traitement du signal), car il est plus flexible et puissant que la plupart des langues, tout en générant un code plus efficace que la plupart des langues. Je peux généralement obtenir des performances avec un facteur de +/- 2 de la vitesse dit de c ++, mais je peux mettre en œuvre des choses beaucoup plus rapidement et gérer une complexité qui me prendrait beaucoup plus de temps que si j’utilisais c ++, Java, c #.
C'est errer hors sujet cependant. Je pense que le code AI a été écrit principalement en LISP pendant un certain temps parce que c'est une approche puissante du code de recherche. Il l'est toujours; mais à mesure que les algorithmes de l'IA devenaient mieux compris et explorés, certaines parties étaient beaucoup plus faciles à enseigner et à utiliser; ils apparaissaient donc dans les langues de l'année dans les cours de premier cycle. À partir de là, le problème est de savoir ce que les gens savent déjà, quelles bibliothèques sont disponibles et ce qui fonctionne bien pour les grands groupes.
Je suppose que l'une des principales raisons était la flexibilité des listes en tant que structure de données de base.
à l'époque, le fait de pouvoir les transformer en toutes sortes d'objets composites et de nouvelles choses telles que le passage de messages et le polimorphisme en faisaient le langage de choix; pas spécifiquement pour l'IA, mais pour de grandes tâches complexes. surtout quand ils expérimentaient avec des concepts.
Je me souviens avoir entendu dire qu'en tant que langage fonctionnel, LISP était un très bon choix pour l'implémentation d'algorithmes récursifs. Il est essentiel de pouvoir repérer un arbre et de revenir en arrière si l’on prend en compte les processus de prise de décision (parcours) et le résultat final (noeud feuille).
Cela m’a été rapporté lors d’un cours d’IA à l’université où nous avons étudié le LISP.
Je pense que vous avez raison: LISP était un outil pratique pour pirater les choses. Cela est dû au fait qu’il n’a pas fait beaucoup de distinction entre programme et données. Cela permettait aux pirates de manipuler des fonctions très facilement, tout comme des données.
Mais le LISP est assez difficile à lire pour les humains, avec ses accolades et sa non-distinction entre données et programme. Aujourd'hui, je n'utiliserai pas LISP pour aucun code d'intelligence artificielle de production (ni même pour le prototypage), mais je préférerais de beaucoup python pour les scripts.
Une autre chose à considérer est les bibliothèques/outils existants dans/liés au langage. Je ne suis pas en mesure de comparer les bibliothèques LISP avec les bibliothèques python), mais j'imagine que les bibliothèques et l'open source importent beaucoup plus qu'avant.
Cette réponse a été inspirée par la comparaison suivante entre LISP et python: http://amitp.blogspot.com/2007/04/LISP-vs-python-syntax.html
Une réponse plus cynique pourrait être "parce qu’il a perdu une guerre politique entre le Japon et les États-Unis dans l'IA dans les années 1980". Il y a un amusement billet de blog qui spécule sur l'impact de la disparition du système informatique de cinquième génération sur Prolog .