78 votes

Où apprendre à utiliser Common Lisp de manière pratique ?

Je suis un programmeur C++ qui essaie d'apprendre Common Lisp. J'ai consulté des livres comme Land of Lisp et lu de nombreux articles en ligne sur les différentes vertus de Lisp. Cependant, j'ai besoin de quelques conseils.

Presque tout ce que j'ai lu sur Common Lisp a trait à la façon dont il est étonnant et à la rapidité incroyable avec laquelle on peut faire des choses avec lui, et à la façon dont il a résolu de façon incroyable de nombreux problèmes des langages de programmation modernes il y a 30 ans. De même, les macros sont incroyables, et tous les paradigmes de programmation (OO, fonctionnel, basé sur les acteurs, etc.) peuvent être utilisés en Lisp, et 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 sur la façon de faire des choses pratiques comme lire un fichier, le diviser en mots et faire un traitement dessus. Je ne suis pas intéressé par l'apprentissage de Common Lisp pour le plaisir d'apprendre Common Lisp, mais pour pouvoir faire des choses que j'avais l'habitude de faire en C++ plus rapidement et avec moins d'erreurs.

Donc ma question est quelle est la meilleure ressource (que ce soit un site web, un livre, n'importe quoi) qui se concentre sur l'enseignement de l'utilisation de Common Lisp pour effectuer des tâches de programmation courantes. comme

  • Comment lire les fichiers
  • Comment lire un fichier, remplacer des mots dans le fichier et réécrire le résultat dans le fichier ?
  • Interroger les fichiers d'un répertoire et d'autres éléments du système de fichiers.
  • Interagir avec une base de données SQL
  • Communiquer via des sockets
  • Threading pour des choses comme un serveur web
  • Créer des interfaces graphiques
  • Effectuer des opérations sur des fichiers binaires
  • Écrire un analyseur syntaxique (pas un interpréteur pour Lisp en Lisp, ce qui, d'après ce que j'ai compris, correspond à 5 lignes de Lisp).
  • Interagir avec le système d'exploitation (c'est-à-dire des choses écrites en C ou C++) pour faire des choses que Lisp ne peut pas faire nativement.
  • Comment écrire des extensions Lisp en C (est-ce possible ?)
  • Intégrer un interpréteur lua (est-ce possible ?)

Et aussi, sur une note moins immédiatement pratique, comment mettre en œuvre des structures de données communes en lisp, comme 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 y 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, sinon les gens ne l'aimeraient pas autant. Et les documents susmentionnés que j'ai lus mentionnent de nombreux logiciels du monde réel écrits en Lisp (le magasin Web de Yahoo ! me vient à l'esprit).

Cependant, le fait d'avoir programmé dans un ( le ? ), je suis impatient d'utiliser mes nouvelles connaissances pour écrire des applications concrètes. Alors quel est le moyen le plus rapide d'apprendre à écrire des logiciels pratiques avec Lisp ?

Au fait, j'ai vu le film de Peter Seibel. Pratique du Common Lisp mais, à en juger par le TOC, il n'aborde que les sujets suivants un peu de des choses pour lesquelles j'aimerais apprendre à utiliser Lisp.

Une dernière question si je peux me permettre (désolé si je combine deux questions en une seule), où puis-je trouver une référence aux fonctions de Lisp et autres ?

Et je vraiment veulent aimer Lisp.

91voto

Rainer Joswig Points 62532

Je propose de lire ' Pratique du Common Lisp puisqu'il répond déjà à certaines de vos questions.

Il y a probablement trois ou quatre livres que vous devriez lire. :

Référence Common Lisp

Manuels

La prochaine chose que vous devriez vérifier est le manuel de votre implémentation de Lisp. Il décrit un grand nombre d'extensions spécifiques : réseau, threads, ...

Documentation pour les implémentations de Common Lisp :

SLIME (le Lisp-IDE basé sur Emacs) possède une fonction Manuel d'utilisation de SLIME .

Documentation pour les bibliothèques Common Lisp :

Bibliothèques

Pour les bibliothèques, utilisez

Maintenant, je regarde certains de vos points :

  • Comment lire les fichiers

Voir le dictionnaire des fichiers et des flux dans la section HyperSpec . AVEC-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...

  • Comment lire un fichier, remplacer des mots dans le fichier et réécrire le résultat dans le fichier ?

Utiliser au-dessus. Voir aussi : WRITE et connexe.

  • Interroger les fichiers d'un répertoire et d'autres éléments du système de fichiers.

Voir ci-dessus. REPERTOIRE, noms de chemin, ...

  • Interagir avec une base de données SQL

Utilisez par exemple la bibliothèque CLSQL.

  • Communiquer via des sockets

Consultez le manuel de votre Lisp ou utilisez l'une des bibliothèques portables. Voir Quicklisp.

  • Threading pour des trucs comme un serveur web

Consultez le manuel de votre Lisp ou utilisez l'une des bibliothèques portables. Voir Quicklisp.

  • Créer des interfaces graphiques

Ça dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation.

  • Effectuer des opérations sur des fichiers binaires

Voir Hyperspec pour les opérations sur les fichiers et les flux. WRITE-BYTE, READ-BYTE. Ouvrir un flux comme un flux binaire.

  • Écrire un analyseur syntaxique (pas un interpréteur pour Lisp en Lisp, ce qui, d'après ce que j'ai compris, correspond à 5 lignes de Lisp).

Utilisez l'un des outils existants pour cela. Étudiez les analyseurs existants. Il existe de nombreux analyseurs syntaxiques écrits en Lisp, mais il n'y a pas grand chose dans les livres à ce sujet (à part les analyseurs syntaxiques en langage naturel, qui sont décrits dans la littérature sur l'IA).

  • Interagir avec le système d'exploitation (c'est-à-dire des choses écrites en C ou C++) pour faire des choses que Lisp ne peut pas faire nativement.

Ça dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation.

  • Comment écrire des extensions Lisp en C (est-ce possible ?)

Ça dépend. Voir Quicklisp ou une bibliothèque spécifique à l'implémentation. -> FFI

Avis final : Lisez le code d'autres auteurs.

Étudier d'autres codes Lisp. Il existe suffisamment de code Lisp très diversifié. Des serveurs web aux logiciels de composition musicale.

6voto

omouse Points 2840

Vérifiez Cliki, le wiki de Common Lisp il fournit une liste de bibliothèques disponibles pour Common Lisp qui vous aideront à accomplir tous vos objectifs.

Aussi, vous allez vouloir vérifier le livre de cuisine Common Lisp (il y a aussi un plus version actualisée ). Il contient 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, bien qu'il ne s'agisse pas de Common Lisp. En général, ce que vous voulez faire, c'est écrire le code en Common Lisp, puis l'optimiser autant que possible en utilisant différentes déclarations de 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 elles ont des threads maintenant.

Hunchentoot est l'un des meilleurs serveurs web Lisp et il est assez facile de commencer à l'utiliser. Vous n'avez pas à écrire de code de threading vous-même, il vous suffit d'écrire les fonctions de traitement des requêtes HTTP.

Quelqu'un a compilé une liste d'options d'interface graphique pour Lisp :

  • cl-gtk2, une interface pour la bibliothèque gui GTK
  • McClim
  • Grenat
  • Qt commun
  • EQL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X