Soy un programador de C ++ que intenta aprender Common Lisp. He mirado algunos libros como Land of Lisp y he leído numerosos artículos en línea sobre las diversas virtudes de Lisp. Sin embargo, necesito algunos consejos.
Casi todo lo que he leído sobre Common Lisp tiene que ver con lo asombroso que es y lo increíblemente rápido que se pueden hacer cosas con él y cómo resolvió asombrosamente muchos problemas con los lenguajes de programación modernos hace 30 años. También lo asombrosas que son las macros, y cómo cada paradigma de programación (OO, funcional, basado en actores o lo que sea, etc.) puede usarse en Lisp, y cómo las listas son la estructura de datos definitiva. Básicamente, tratar Lisp como un lenguaje de investigación y decir cuán diferente y revolucionario es.
Y todo eso probablemente sea cierto, pero el problema es que no he visto muchas cosas sobre cómo hacer cosas prácticas como leer un archivo, dividirlo en palabras y procesarlo. No estoy interesado en aprender Common Lisp por aprender Common Lisp, sino por hacer lo que solía hacer en C ++ más rápido y con menos errores.
Entonces, mi pregunta es cuál es el mejor recurso (ya sea un sitio web, un libro, cualquier cosa) que se enfoca en enseñar cómo usar Common Lisp para realizar tareas de programación comunes como
- Cómo leer archivos
- Cómo leer un archivo, reemplazar palabras en el archivo y volver a escribir el resultado en el archivo
- Itere los archivos en un directorio y otras cosas del sistema de archivos
- Interactuar con una base de datos SQL
- Hacer comunicaciones sobre enchufes
- Subprocesos para cosas como un servidor web
- Crear GUI
- Realizar operaciones en archivos binarios
- Escriba un analizador (no un intérprete para Lisp en Lisp, que según tengo entendido es como 5 líneas de Lisp)
- Interactuar con el sistema operativo (es decir, cosas escritas en C o C ++) para hacer cosas que Lisp no puede hacer de forma nativa
- Cómo escribir extensiones Lisp en C (¿es eso posible?)
- Incrustar un intérprete lua (¿es posible?)
Y también en una nota práctica menos inmediata, cómo implementar estructuras de datos comunes en lisp como un montón, pila, árbol de búsqueda binaria, etc. Sin embargo, eso puede ser simplemente usando las operaciones de lista de Lisp como car
y cdr
de la manera correcta. No lo sé.
Dudo mucho que algo de esto (con la improbable excepción de los dos últimos de la lista) sea imposible con Lisp o a la gente no le encantaría tanto. Y lo antes mencionado que he leído menciona un montón de software del mundo real escrito en Lisp (me viene a la mente la tienda web de Yahoo!).
Sin embargo, teniendo la programación en un lenguaje imperativo ( ¿el? ) Antes, estoy ansioso por usar los nuevos conocimientos que obtengo para escribir aplicaciones del mundo real. Entonces, ¿cuál es la forma más rápida de aprender a escribir software práctico con Lisp?
Por cierto, he visto Practical Common Lisp de Peter Seibel pero, a juzgar por el TOC, solo toca algunas de las cosas que me gustaría aprender a hacer con Lisp.
Una pregunta más si puedo (lo siento si esto es combinar dos preguntas en una), ¿dónde puedo encontrar una referencia a las funciones de Lisp y esas cosas?
Y realmente quiero que me guste Lisp.
fuente
Respuestas:
Propondría leer ' Practical Common Lisp ', ya que ya responde algunas de sus preguntas.
Probablemente hay de tres a cuatro libros que debería leer :
Referencia común de Lisp
Manuales
Ahora, lo siguiente que debe consultar es el manual de su implementación Lisp. Describe muchas extensiones específicas: redes, hilos, ...
Documentación para implementaciones de Common Lisp:
SLIME (Lisp-IDE basado en Emacs) tiene un manual de usuario de SLIME .
Documentación para bibliotecas Common Lisp:
Bibliotecas
Para uso de bibliotecas
Ahora, analizando algunos de sus puntos:
Consulte el diccionario de archivos y secuencias en HyperSpec . CON-OPEN-STREAM, READ, READ-LINE, READ-CHAR, READ-BYTE, READ-SEQUENCE, ...
Utilice arriba. Ver también: ESCRIBIR y relacionados.
Véase más arriba. DIRECTORIO, nombres de ruta, ...
Utilice, por ejemplo, la biblioteca CLSQL.
Consulte el manual de su Lisp o use una de las bibliotecas portátiles. Consulte Quicklisp.
Consulte el manual de su Lisp o use una de las bibliotecas portátiles. Consulte Quicklisp.
Depende. Consulte Quicklisp o una biblioteca específica de implementación.
Consulte Hyperspec para las operaciones de archivos y secuencias. WRITE-BYTE, READ-BYTE. Abra una secuencia como una secuencia binaria.
Utilice una de las herramientas existentes para eso. Estudie los analizadores sintácticos existentes. Hay muchos analizadores sintácticos escritos en Lisp, pero no muchos en libros sobre eso (aparte de los analizadores sintácticos de lenguaje natural, que se describen en la literatura sobre IA).
Depende. Consulte Quicklisp o una biblioteca específica de implementación.
Depende. Consulte Quicklisp o una biblioteca específica de implementación. -> FFI
Consejo final: lea el código de otros autores.
Estudie otro código Lisp. Hay suficiente código Lisp muy diverso por ahí. Desde servidores web hasta software de composición musical.
fuente
Echa un vistazo a Cliki, el wiki de Common Lisp que proporciona una lista de bibliotecas disponibles para Common Lisp que te ayudarán a realizar todos tus elementos.
Además, querrá consultar el libro de cocina Common Lisp (también hay una versión más actualizada ). Tiene un montón de código para tareas comunes, tales como la lectura de una línea de un archivo a la vez , y las interfaces de función Exterior para interactuar con bibliotecas escritas en C .
Puede escribir extensiones para Lisp en C dependiendo de la implementación que esté usando. Emacs-Lisp, por ejemplo, le permite hacer eso aunque no es Common Lisp. Por lo general, lo que desea hacer es escribir el código en Common Lisp y luego optimizarlo tanto como sea posible usando diferentes declaraciones del compilador Lisp, o el otro método donde usa una interfaz de función externa.
El subproceso depende de la implementación que uses, pero creo que la mayoría de ellos ahora tienen subprocesos.
Hunchentoot es uno de los mejores servidores web Lisp y es bastante fácil comenzar con él. No tiene que escribir ningún código de subprocesamiento usted mismo, solo tiene que escribir las funciones del controlador de solicitudes HTTP.
Alguien compiló una lista de opciones de GUI para Lisp :
fuente