J'ai appris Lisp pour élargir mes horizons parce que j'ai entendu dire qu'il était utilisé dans la programmation d'IA. Après avoir exploré, je n'ai pas encore trouvé d'exemples d'IA ou quoi que ce soit dans le langage qui le rendrait plus enclin à le faire.
Lisp a-t-il été utilisé dans le passé parce qu'il était disponible, ou y a-t-il quelque chose qui me manque?
lisp
artificial-intelligence
Cristián Romo
la source
la source
Réponses:
Lisp était utilisé en IA jusqu'à la fin des années 1980. Dans les années 80, cependant, Common Lisp a été survendu au monde des affaires sous le nom de "langage IA"; le contrecoup a forcé la plupart des programmeurs d'IA à utiliser C ++ pendant quelques années. De nos jours, les prototypes sont généralement écrits dans un langage dynamique plus jeune (Perl, Python, Ruby, etc.) et les implémentations de recherches réussies sont généralement en C ou C ++ (parfois Java).
Si vous êtes curieux des années 70 ... eh bien, je n'étais pas là. Mais je pense que Lisp a réussi dans la recherche sur l'IA pour trois raisons (par ordre d'importance):
Je n'ai pas l'ancien livre de Peter Norvig sur l'IA , mais c'est censé être un bon moyen d'apprendre à programmer des algorithmes d'IA en Lisp.
Avertissement: Je suis un étudiant diplômé en linguistique computationnelle. Je connais bien mieux le sous-domaine du traitement du langage naturel que les autres domaines. Peut-être que Lisp est plus utilisé dans d'autres sous-champs.
la source
Artificial Intelligence by Patrick Henry Winston
. À la deuxième édition, les chapitres de programmation de ce livre se sont ramifiés dans leur propre livre synchronisé -Lisp
. Comme son nom l'indique, la programmation est entièrement enLisp
. people.csail.mit.edu/phw/Books/LISPBACK.HTMLLisp est utilisé pour l'IA car il prend en charge l'implémentation de logiciels qui calculent très bien avec des symboles. Les symboles, les expressions symboliques et le calcul avec ceux-ci sont au cœur de Lisp.
Les domaines typiques de l'IA pour le calcul avec des symboles étaient / sont: l'algèbre informatique, la démonstration de théorèmes, les systèmes de planification, le diagnostic, les systèmes de réécriture, la représentation et le raisonnement des connaissances, les langages logiques, la traduction automatique, les systèmes experts, etc.
Il n'est donc pas surprenant que de nombreuses applications IA célèbres dans ces domaines aient été écrites en Lisp:
Il existe des milliers d'applications dans ces domaines qui sont écrites en Lisp. Ils ont souvent besoin de capacités spéciales dans le domaine du traitement symbolique. On implémente des langages spéciaux qui ont des interpréteurs / compilateurs spéciaux dans ces domaines en plus de Lisp. Lisp permet de créer des représentations pour des données symboliques et des programmes et peut implémenter toutes sortes de machines pour manipuler ces expressions (formules mathématiques, formules logiques, plans, ...).
(Notez que beaucoup d'autres langages de programmation à usage général sont également utilisés dans l'IA. J'ai essayé de répondre pourquoi, en particulier, Lisp est utilisé dans l'IA.)
la source
Une des raisons est qu'il vous permet d'étendre le langage avec des constructions spécifiques à votre domaine, ce qui en fait, effectivement, un langage spécifique à un domaine. Cette technique est incroyablement puissante car elle vous permet de raisonner sur le problème que vous résolvez, plutôt que sur le mélange de bits.
la source
Ma conjecture a toujours été que, étant un langage fonctionnel, il ne fait pas la différence entre le code et les données. Tout, y compris les définitions de fonction et les appels de fonction, peut être traité comme des listes et modifié comme n'importe quel autre élément de données.
Ainsi, un code auto-inspecté et modifiable peut être écrit facilement.
la source
Une réponse possible est que l'IA est un ensemble de problèmes très difficiles, et Lisp est un bon langage pour résoudre des problèmes difficiles, pas seulement l'IA.
Quant à savoir pourquoi: les macros, les fonctions génériques et l'introspection riche permettent un code concis et une introduction facile des abstractions de domaine - c'est un langage que vous pouvez rendre plus puissant. Pour de nombreux problèmes, ce n'est pas nécessaire, et cela a ses propres coûts, mais pour d'autres problèmes, il faut de l'énergie pour progresser.
la source
Je pense qu'il est faux de penser à cela en termes d'IA uniquement. Des choses comme l'IA-hiver et les effets commerciaux sur le lisp commun sont dérangeantes si vous vous demandez pourquoi il a été 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 de l'IA était essentiellement du code de recherche. Lisp est un excellent langage pour la programmation exploratoire, pour l'implémentation d'algorithmes difficiles, pour le code auto-modifiable et souvent modifié. En d'autres termes, pour le code de recherche.
J'utilise lisp aujourd'hui pour certains de mes codes de recherche (mathématiques, traitement du signal) car il est plus flexible et puissant que la plupart des langages tout en générant un code plus efficace que la plupart des langages. Je peux généralement obtenir des performances dans un facteur de +/- 2 de la vitesse par exemple c ++, mais je peux implémenter les choses beaucoup plus rapidement et gérer une complexité qui me prendrait beaucoup plus de temps que si j'utilisais c ++, java, c #.
Mais cela ne fait pas partie du sujet. Je pense que le code AI a été principalement écrit en lisp commun pendant un certain temps, car il s'agit d'une approche puissante pour la recherche de code. C'est toujours le cas; mais au fur et à mesure que les algorithmes de l'IA devenaient mieux compris et explorés, certaines d'entre elles étaient beaucoup plus faciles à enseigner et à utiliser, de sorte qu'ils se présentaient dans les langues de l'année dans les cours de premier cycle. À partir de là, il devient une question de ce que les gens savent déjà, quelles bibliothèques sont disponibles et ce qui fonctionne bien pour les grands groupes.
la source
Je suppose que l'une des principales raisons était la flexibilité des listes en tant que structure de données de base.
à l'époque, être capable de les transformer en toutes sortes d'objets composites, et de nouvelles choses comme passages de messages et polimorphisme, en a fait le langage de choix; pas spécifiquement pour l'IA, mais pour les tâches importantes et complexes. surtout lorsqu'ils expérimentaient des concepts.
la source
Je pense que vous avez raison: Lisp était un outil pratique pour pirater les choses. C'est parce qu'il ne distinguait pas beaucoup le programme et les données. Cela a permis aux pirates de manipuler des fonctions très facilement, tout comme les données.
Mais lisp est assez difficile à lire pour les humains, avec ses accolades et la non-distinction entre les données et le programme. Aujourd'hui, je n'utiliserai lisp pour aucun code d'IA de production (ou peut-être même pour le prototypage) mais préférerais de loin python pour les scripts.
Une autre chose à considérer est les bibliothèques / outils existants dans / liés à la langue. Je ne suis pas en mesure de comparer les bibliothèques lisp avec les bibliothèques python, mais je suppose que les bibliothèques et l'open source importent beaucoup plus qu'auparavant.
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
la source
Je me souviens avoir entendu que, étant un langage fonctionnel, Lisp était un très bon choix pour implémenter des algorithmes récursifs. Être capable de traquer un arbre et de revenir en arrière est essentiel lorsque l'on considère les processus de prise de décision (traversée) et le résultat final (nœud feuille).
Cela m'a été dit lors d'un cours d'IA à l'université où nous avons étudié Lisp.
la source
Une réponse plus cynique pourrait être "parce qu'elle a perdu une guerre politique de l'IA entre le Japon et les États-Unis dans les années 1980". Il y a un article de blog amusant qui spécule sur l'impact de la disparition du système informatique de cinquième génération sur le Prolog .
la source