Je suis un programmeur C++ essayant d'apprendre LISP commun. J'ai regardé quelques livres comme Land of LISP et lu de nombreux articles en ligne sur les différentes vertus du LISP. Cependant, j'ai besoin de quelques conseils.
Presque tout ce que j'ai lu à propos de Common LISP a à voir avec son incroyable et à quel point vous pouvez en faire rapidement et comment il a résolu de nombreux problèmes avec les langages de programmation modernes il y a 30 ans. Aussi comment les macros sont incroyables, et comment chaque paradigme de programmation (OO, fonctionnel, basé sur un acteur ou autre, etc.) peut être utilisé dans LISP, et comment les listes sont la structure de données ultime. En gros, traiter LISP comme un langage de recherche et dire à quel point il est différent et révolutionnaire.
Et tout cela est probablement vrai, mais le problème est que je n'ai pas vu beaucoup de choses comment faire des choses pratiques comme lire un fichier et le diviser en mots et faire un peu de traitement dessus. Je ne suis pas intéressé à apprendre Common LISP pour apprendre Common LISP, mais pour que les choses que je faisais en C++ se fassent plus rapidement et avec moins d'erreurs.
Donc, ma question est quelle est la meilleure ressource (que ce soit un site Web, un livre, quoi que ce soit) qui se concentre sur l'enseignement de l'utilisation de Common LISP pour effectuer des tâches de programmation courantes comme
Et aussi sur une note moins immédiate, comment implémenter des structures de données communes dans LISP telles qu'un tas, une pile, un arbre de recherche binaire, etc. Cependant, cela peut être simplement en utilisant les opérations de liste de LISP comme car
et cdr
de la bonne manière. Je ne sais pas.
Je doute fortement que tout cela (à l'exception improbable des deux derniers de la liste) soit impossible avec LISP ou les gens ne l'aimeraient pas autant. Et les éléments susmentionnés que j'ai lus mentionnent de nombreux logiciels du monde réel écrits en LISP (la boutique en ligne Yahoo! Me vient à l'esprit).
Cependant, ayant auparavant programmé dans un ( langage impératif? ), je suis impatient d'utiliser les nouvelles connaissances que j'obtiens pour écrire des applications du monde réel. . Alors, quelle est la façon la plus rapide d'apprendre à écrire des logiciels pratiques avec Lisp?
Soit dit en passant, j'ai vu le LISP pratique commun de Peter Seibel mais, à en juger par la table des matières, il ne fait qu'effleurer certaines des choses que j'aimerais apprendre à utiliser LISP.
Une autre question si je peux (désolé si cela combine deux questions en une), où puis-je trouver une référence aux fonctions et aux trucs de LISP?
Et je veux vraiment aimer LISP.
Je proposerais de lire " LISP pratique pratique ", car il répond déjà à certaines de vos questions.
Il y a probablement trois à quatre livres à lire :
Référence LISP commune
Manuels
Maintenant, la prochaine chose que vous devriez vérifier est le manuel de votre implémentation LISP. Il décrit de nombreuses extensions spécifiques: mise en réseau, threads, ...
Documentation pour les implémentations LISP courantes:
SLIME (le LISP-IDE basé sur Emacs) a un SLIME User Manual .
Documentation pour les bibliothèques LISP communes:
Bibliothèques
Pour les bibliothèques, utilisez
Examinons maintenant certains de vos points:
Voir le dictionnaire des fichiers et des flux dans le HyperSpec . WITH-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...
Utilisez ci-dessus. Voir aussi: WRITE and related.
Voir au dessus. RÉPERTOIRE, noms de chemin, ...
Utilisez par exemple la bibliothèque CLSQL.
Consultez le manuel de votre LISP ou utilisez l'une des bibliothèques portables. Voir Quicklisp.
Consultez le manuel de votre LISP ou utilisez l'une des bibliothèques portables. Voir Quicklisp.
Dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation.
Voir Hyperspec pour les opérations de fichiers et de flux. WRITE-BYTE, READ-BYTE. Ouvrez un flux en tant que flux binaire.
Utilisez l'un des outils existants pour cela. Étudiez les analyseurs existants. Il existe de nombreux analyseurs écrits dans LISP, mais pas beaucoup dans les livres à ce sujet (autres que les analyseurs en langage naturel, qui sont décrits dans la littérature sur l'IA).
Dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation.
Dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation. -> FFI
Dernier conseil: lisez le code des autres auteurs.
Étudiez un autre code LISP. Il existe suffisamment de code LISP très diversifié. Des serveurs Web aux logiciels de composition musicale.
Consultez Cliki le wiki Common LISP il fournit une liste de bibliothèques disponibles pour Common LISP qui vous aideront à accomplir tous vos éléments.
En outre, vous allez vouloir vérifier le livre de recettes LISP commun (il y a aussi plus version mise à jour ). Il a un tas de code pour les tâches courantes telles que lire un fichier une ligne à la fois , et Interfaces de fonctions étrangères pour interagir avec les bibliothèques écrites en C .
Vous pouvez écrire des extensions pour LISP en C selon l'implémentation que vous utilisez. Emacs-LISP, par exemple, vous permet de le faire même s'il ne s'agit pas de LISP commun. Habituellement, ce que vous voulez faire est d'écrire le code dans LISP commun, puis de l'optimiser autant que possible en utilisant différentes déclarations du compilateur LISP, ou l'autre méthode où vous utilisez une interface de fonction étrangère.
Le threading dépend de l'implémentation que vous utilisez, mais je pense que la plupart d'entre eux ont maintenant des threads.
Hunchentoot est l'un des meilleurs serveurs Web LISP et est assez facile à démarrer. Vous n'avez pas à écrire de code de thread vous-même, il vous suffit d'écrire les fonctions du gestionnaire de requêtes HTTP.
Quelqu'un a compilé ne liste d'options GUI pour LISP :