web-dev-qa-db-fra.com

Où apprendre à utiliser pratiquement Common Lisp

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

  • Comment lire des fichiers
  • Comment lire un fichier, remplacer des mots dans le fichier et réécrire le résultat dans le fichier
  • Itérer les fichiers dans un répertoire et d'autres éléments du système de fichiers
  • Interagir avec une base de données SQL
  • Faire des communications via des sockets
  • Enfiler des trucs comme un serveur web
  • Créer des GUI
  • Effectuer des opérations sur des fichiers binaires
  • Écrire un analyseur (pas un interprète pour LISP dans LISP, qui, si je comprends bien, est comme 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ète lua (est-ce possible?)

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.

78
NewLisper

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:

  • Comment lire des fichiers

Voir le dictionnaire des fichiers et des flux dans le HyperSpec . WITH-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

Utilisez ci-dessus. Voir aussi: WRITE and related.

  • Itérer les fichiers dans un répertoire et d'autres éléments du système de fichiers

Voir au dessus. RÉPERTOIRE, noms de chemin, ...

  • Interagir avec une base de données SQL

Utilisez par exemple la bibliothèque CLSQL.

  • Faire des communications via des sockets

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

  • Enfiler 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 GUI

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 de fichiers et de flux. WRITE-BYTE, READ-BYTE. Ouvrez un flux en tant que flux binaire.

  • Écrire un analyseur (pas un interprète pour LISP dans LISP, qui, si je comprends bien, est comme 5 lignes de LISP)

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).

  • 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

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

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

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.

89
Rainer Joswig

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 :

  • cl-gtk2, une interface avec la bibliothèque GTK gui
  • McClim
  • Grenat
  • Qt commun
  • EQL
6
Rudolf Olah