Question

Je sens vraiment que je devrais apprendre Zézayer et il existe de nombreuses bonnes ressources pour m'aider à le faire.

Je ne suis pas rebuté par la syntaxe compliquée, mais où dans la « programmation commerciale traditionnelle » pourrais-je trouver des endroits où il serait logique de l'utiliser à la place d'un langage procédural.

Existe-t-il une application commerciale qui a été écrite en Lisp ?

Était-ce utile?

La solution

L’une des principales utilisations de Lisp est l’intelligence artificielle.Un de mes amis à l'université a suivi un cours d'études supérieures en IA et pour son projet principal, il a écrit un "Couvre-feu" solveur en Lisp.Plusieurs versions de son programme utilisaient des routines d'IA légèrement différentes et des tests sur une quarantaine d'ordinateurs ont donné des résultats assez intéressants (j'aurais aimé qu'il soit en ligne quelque part pour que je puisse y accéder, mais je ne pense pas que ce soit le cas).

Il y a deux semestres, j'ai utilisé Scheme (un langage basé sur Lisp) pour écrire un programme interactif simulant la routine "Who's on First" d'Abbott et Costello.Les entrées de l'utilisateur ont été comparées à des structures de données assez complexes (ressemblant à des cartes dans d'autres langues, mais beaucoup plus flexibles) pour choisir quelle serait la réponse appropriée.J'ai aussi écrit une routine pour résoudre un 3x3 casse-tête coulissant (un algorithme qui pourrait facilement être étendu à des puzzles de diapositives plus grands).

En résumé, l’apprentissage de Lisp (ou Scheme) ne donne peut-être pas beaucoup d’applications pratiques au-delà de l’IA, mais il s’agit d’une expérience d’apprentissage extrêmement précieuse, comme beaucoup d’autres l’ont déclaré.Programmer dans un langage fonctionnel comme Lisp vous aidera également à penser de manière récursive (si vous avez rencontré des problèmes de récursion dans d'autres langages, cela pourrait être d'une grande aide).

Autres conseils

Lisp est un langage vaste et complexe avec un environnement d'exécution vaste et complexe pour le prendre en charge.Pour cette raison, Lisp est le mieux adapté aux problèmes volumineux et complexes.

Maintenant, un complexe le problème n'est pas le même qu'un compliqué un.UN complexe le problème en est un avec beaucoup de petits détails, mais qui n’est pas difficile.Écrire un système de réservation de compagnies aériennes est une affaire complexe, mais avec suffisamment d'argent et de programmeurs, ce n'est pas difficile.Obtenez la différence?

Un problème complexe est un problème alambiqué, un problème dans lequel la méthode traditionnelle diviser pour mieux régner ne fonctionne pas.Contrôler un robot, ou travailler avec des données qui ne sont pas tabulaires (des langues par exemple), ou des situations très dynamiques.

Lisp est vraiment bien adapté aux problèmes où la solution doit être extensible ;l'exemple classique est l'éditeur de texte emacs.Il est entièrement programmable et constitue donc un environnement de programmation à part entière.

Dans son célèbre livre PAIP, Norvig dit que Lisp est idéal pour la programmation exploratoire.C'est-à-dire programmer une solution à un problème qui n'est pas entièrement compris (contrairement à un système de réservation en ligne).Autrement dit:Problèmes compliqués.

De plus, apprendre le Lisp vous rappellera quelque chose de fondamental qui a été oublié :La différence entre Von Neumann et Turing.Comme nous le savons, le modèle de calcul de Turing est un modèle théorique intéressant, mais inutile pour concevoir des ordinateurs.Von Neumann, quant à lui, a conçu un modèle de la façon dont les ordinateurs et le calcul devaient s'exécuter :Le modèle Von Neumann.L'élément central du modèle Von Neumann est que vous n'avez qu'une seule mémoire et que vous y stockez à la fois votre code et vos données.Notez attentivement qu'un programme Java (ou C#, ou ce que vous voulez) est une manifestation du modèle de Turing.Vous fixez votre programme concrètement, une fois pour toutes.Ensuite, vous espérez pouvoir gérer toutes les données qui y sont transmises.

Lisp maintient le modèle de Von Neuman ;il n'y a pas de frontière nette et prédéterminée entre le code et les données.La programmation en Lisp ouvre votre esprit à la puissance du modèle de Von Neumann.La programmation en Lisp vous permet de voir d'anciens concepts sous un nouveau jour.

Enfin, étant interactif, vous apprendrez à interagir avec vos programmes au fur et à mesure que vous les développez (par opposition à la compilation et à l'exécution).Cela change également la façon dont vous programmez et la façon dont vous visualisez la programmation.

Avec cette introduction, je peux enfin proposer une réponse à votre question :Trouverez-vous des endroits où il éclipse les langues « traditionnelles » ?

Si vous êtes un programmeur avancé, vous avez besoin d’outils avancés.Et il n’existe aucun outil plus avancé que Lisp.Ou, en d'autres termes :La réponse est oui si vos problèmes sont difficiles.Non sinon.

En réponse à @lassevk:

alt text

syntaxe compliquée??

La syntaxe de Lisp est incroyablement simple.

Application qui tue écrite en Lisp : emacs.Lisp vous permettra d'étendre Emacs à volonté pour faire presque tout ce à quoi vous pouvez penser et qu'un éditeur pourrait faire.

Mais, vous ne devriez apprendre le zézaiement que si vous vouloir à, et vous ne pourrez peut-être jamais l'utiliser au travail, mais c'est toujours génial.

Aussi, je veux ajouter:même si vous trouvez des endroits où Lisp aura du sens, vous ne convaincrez probablement personne d'autre qu'il doit être utilisé sur Java, C++, C#, Python, Ruby, etc.

Je ne peux pas répondre par expérience directe, mais vous devriez lire quoi Paul Graham a écrit sur Lisp.Quant à la partie "killer-app", lisez Battre les moyennes.

J'ai programmé professionnellement en Lisp pendant environ un an, et cela vaut vraiment la peine d'être appris.Vous aurez une opportunité sans précédent de supprimer la redondance de votre code, en étant capable de remplacer tout le code passe-partout par des fonctions lorsque cela est possible, et des macros dans le cas contraire.Vous pourrez également accéder à une flexibilité inégalée au moment de l’exécution, traduisant librement entre le code et les données.Ainsi, les situations dans lesquelles les actions des utilisateurs peuvent déclencher la nécessité de construire des structures complexes de manière dynamique sont celles où Lisp brille vraiment.Les planificateurs de vols des compagnies aériennes populaires sont écrits en Lisp, et il existe également de nombreux logiciels de CAO/FAO en Lisp.

Lisp est très utile pour créer de petits DSL.J'ai une copie de Lisp in a Box en cours d'exécution au travail et j'ai écrit de petits DSL pour interroger les bases de données du serveur SQL et générer des couches de données, etc. en C#.Tout mon code passe-partout est maintenant écrit dans des macros Lisp qui génèrent en C#.Je génère du HTML, du XML, toutes sortes de choses avec.Même si j'aimerais pouvoir utiliser Lisp pour le codage quotidien, Lisp peut apporter des avantages pratiques.

Si vous aimez la programmation, vous devriez apprendre Lisp pour le pur plaisir. XKCD exprime parfaitement l’illumination intellectuelle qui en découle.Apprendre Lisp est pour le programmeur ce qu'est la méditation pour le moine bouddhiste (et je le pensais sans aucune connotation blasphématoire).

N'importe quel langage semble beaucoup plus difficile lorsqu'on n'utilise pas les conventions d'indentation courantes d'un langage.Quand on les suit en Lisp, on voit comment il exprime assez facilement une structure d'arbre syntaxique (attention, ce n'est pas tout à fait vrai car l'aperçu ment un peu ;les r doivent s'aligner sur les fns dans l'argument de tri rapide récursif) :

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

J'ai découvert que l'apprentissage d'un nouveau langage influence toujours votre style de programmation dans des langages que vous connaissez déjà.Pour moi, cela m'a toujours fait réfléchir de différentes manières pour résoudre un problème dans mon langage principal, qui est Java.Je pense qu'en général, cela élargit simplement votre horizon en termes de programmation.

J'ai suivi un cours de "lisp" à l'université dans les années 80.Malgré la compréhension de tous les concepts présentés en classe, je me suis retrouvé sans n'importe lequel appréciation pour ce qui rend Lisp génial.J'ai peur que beaucoup de gens considèrent le Lisp comme un simple langage de programmation parmi d'autres, ce que ce cours à l'université m'a apporté il y a tant d'années.Si vous voyez quelqu'un se plaindre de la syntaxe Lisp (ou de son absence), il y a de fortes chances qu'il fasse partie de ces personnes qui n'ont pas réussi à saisir la grandeur de Lisp.J'ai fait partie de ces personnes pendant très longtemps.

Ce n'est que deux décennies plus tard, lorsque j'ai ravivé mon intérêt pour le Lisp, que j'ai commencé à « comprendre » ce qui rend le Lisp intéressant – pour moi en tout cas.Si vous parvenez à apprendre le Lisp sans être époustouflé par les fermetures et les macros Lisp, vous avez probablement manqué l'essentiel.

L'apprentissage de LISP/Scheme ne vous donnera peut-être pas plus d'espace d'application, mais cela vous aidera à avoir une meilleure idée de la programmation fonctionnelle, de ses règles et de ses exceptions.

Cela vaut la peine d'investir du temps rien que pour découvrir la différence entre la beauté de six fonctions pures imbriquées et le cauchemar de six fonctions imbriquées avec des effets secondaires.

Depuis http://www.gigamonkeys.com/book/introduction-why-lisp.html

L'un des mythes les plus couramment répétés à propos de LISP est qu'il est «mort». S'il est vrai que le LISP commun n'est pas aussi largement utilisé que, disons, Visual Basic ou Java, il semble étrange de décrire un langage qui continue d'être utilisé pour un nouveau développement et qui continue d'attirer de nouveaux utilisateurs comme «morts». Certaines histoires de réussite LISP récentes incluent Viaweb de Paul Graham, qui est devenue Yahoo Store lorsque Yahoo a acheté son entreprise;Le système de tarification et de shopping du billet d'avion ITA Software, QPX, utilisé par le vendeur de billets en ligne Orbitz et autres;Le jeu de Naughty Dog pour la PlayStation 2, Jak et Daxter, qui est largement écrit dans un dialect de Lisp spécifique au domaine, Naughty Dog inventé appelé but, dont le compilateur est lui-même écrit en Lisp commun;et le Roomba, l'aspirateur robotique autonome, dont le logiciel est écrit en L, un sous-ensemble à la baisse compatible de Lisp commun.Peut-être encore plus révélateur est la croissance du site Web Common Lisp.net, qui héberge des projets LISP communs open-source, et le nombre de groupes d'utilisateurs LISP locaux qui ont vu le jour au cours des deux dernières années.

"Lisp vaut la peine d'être appris pour la profonde expérience d'illumination que vous vivrez lorsque vous l'obtiendrez enfin ;cette expérience fera de vous un meilleur programmeur pour le reste de vos jours, même si vous n'utilisez jamais beaucoup Lisp lui-même.

--Éric S.Raymond, "Comment devenir un hacker"

http://www.paulgraham.com/avg.html

Je suis d'accord que Lisp est l'un de ces langages que vous ne pouvez jamais utiliser dans un cadre commercial.Mais même si vous n’y parvenez pas, l’apprendre élargira certainement votre compréhension de la programmation dans son ensemble.Par exemple, j'ai appris Prolog à l'université et même si je ne l'ai jamais utilisé par la suite, cela m'a permis de mieux comprendre de nombreux concepts de programmation et (parfois) de mieux apprécier les langages que j'utilise.

Mais si vous voulez l'apprendre... par tous les moyens, lisez Sur Lisp

D'accord, je suis peut-être bizarre, mais je n'aime vraiment pas tellement les essais de Paul Graham et sur Lisp est un livre vraiment difficile si vous n'avez pas déjà une certaine compréhension de Common Lisp.Au lieu de cela, je dirais d'opter pour Siebel Common Lisp pratique.Quant aux « killer-apps », Common Lisp semble trouver sa place dans des boutiques de niche, comme ITA, donc même s'il n'y a pas d'application synonyme de CL comme Rails pour Ruby, il y a des endroits dans l'industrie qui l'utilisent si vous creusez un peu.

Si vous devez vous demander si vous devez apprendre le Lisp, vous n’en avez probablement pas besoin.

Apprendre le Lisp mettra Javascript sous un jour complètement différent !Lisp vous oblige vraiment à saisir à la fois la récursivité et l’ensemble du paradigme des « fonctions en tant qu’objets de première classe ».Voir l’excellent article de Crockford sur Schéma vs Javascript.Javascript est peut-être le langage le plus important actuellement, il est donc extrêmement utile de mieux le comprendre !

Le Script-Fu de Gimp est un peu lipish.C'est une application qui tue Photoshop.

Syntaxe compliquée ?La beauté de Lisp est qu’il a une syntaxe ridiculement simple.C'est juste une liste, où chaque élément de la liste peut être soit une autre liste, soit un type de données élémentaire.

Cela vaut la peine d'apprendre car cela améliore votre capacité de codage à penser et à utiliser les fonctions comme un simple type de données.Cela améliorera la façon dont vous codez dans un langage impératif et/ou orienté objet, car cela vous permettra d'être plus flexible mentalement dans la façon dont votre code est structuré.

Pour ajouter aux autres réponses:

Parce que le SICP cours (les vidéos sont disponibles ici) est génial:t'apprend Lisp et beaucoup plus!

Une application qui tue ? Franz Inc. a une longue liste de réussites, mais cette liste n'inclut que les utilisateurs d'AllegroCL...Il y en a probablement d'autres.Mon préféré est l'histoire de Naughty Dog, puisque j'étais un grand fan des jeux Crash Bandicoot.

Pour apprendre Common Lisp, je recommanderais Common Lisp pratique.Il a une approche pratique qui, au moins pour moi, a rendu la tâche plus facile que les autres livres que j'ai consultés.

Vous pourriez utiliser Clojure aujourd'hui pour écrire des tests et des scripts sur la machine virtuelle Java.Bien qu'il existe d'autres langages Lisp implémentés sur la JVM, je pense que Clojure fait le meilleur travail d'intégration avec Java.

Il arrive parfois que le langage Java lui-même gêne l'écriture de tests pour le code Java (y compris la « programmation commerciale traditionnelle »).(Je ne veux pas dire cela comme une accusation contre Java – d’autres langages souffrent du même problème – mais c’est un fait.Puisque le sujet, pas Java, je ne développerai pas.N'hésitez pas à créer un nouveau sujet si quelqu'un souhaite en discuter.) Clojure élimine bon nombre de ces obstacles.

Lisp peut être utilisé partout où vous utilisez une programmation traditionnelle.Ce n'est pas si différent, c'est juste plus puissant.Écrire une application Web ?vous pouvez le faire sur Lisp, en écrivant une application de bureau ?vous pouvez le faire sur Lisp, peu importe, vous pouvez probablement le faire sur Lisp, ou Python, ou toute autre programmation générique (il existe quelques langages adaptés à une seule tâche).

Le plus gros obstacle sera probablement l’acceptation de votre patron, de vos pairs ou de vos clients.C'est quelque chose que vous devrez travailler avec eux.Choisir une solution pragmatique comme Clojure qui peut exploiter la base d'installation actuelle de l'infrastructure Java, de la JVM aux bibliothèques, pourrait vous aider.De plus, si vous avez un programme Java, vous pouvez créer une architecture de plug-in et écrire des plug-ins Clojure pour celui-ci et finir par écrire la moitié de votre code dans Clojure.

Ce n'est pas une raison mais (trivial) AutoCAD prend en charge l'exécution LISP et DCL.C'est un moyen pratique d'écrire des macros complexes (y compris l'automatisation ActiveX) si vous ne souhaitez pas utiliser VBA ou leurs SDK C++ ou .NET, ou si une expression DIESEL ne suffit pas.

De nombreuses fonctions d'AutoCAD sont en réalité des routines LISP.

C'est un sujet auquel j'ai moi-même réfléchi pendant un moment mais je n'ai pas vraiment pris de décision, comme d'habitude le temps est le principal problème...;)

Et comme je ne trouve pas ces liens dans cet article, je les ajoute pour l'intérêt public :

Histoire de réussite et d'échec :Lisping au JPL

Une réussite vraiment impressionnante :Lisp utilisé par la société Orbitz

Comparaison et analyse pour savoir s'il faut utiliser Lisp au lieu de Java :Lisp comme alternative à Java

La syntaxe n'a pas d'importance, la lisibilité ne l'est pas !

Je ne dis pas que c'est une application géniale, mais on dirait qu'elle pourrait être coolhttp://code.google.com/p/plop/

Une application qui tue ?Le moteur de recherche de vols d’ITA Software en est un.

Quant au "pourquoi", cela fera très probablement de vous un meilleur développeur et il est extrêmement peu probable qu'il en fasse un pire.Cela peut cependant vous faire préférer les dialectes Lisp aux autres langues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top