2010-12-03 15 views
6

Soy un experimentado programador de Windows/web C++/.NET/Java que intenta aprender (común) Lisp. Estoy leyendo Practical Common Lisp y usando SLIME.Aprendizaje de sugerencias de Lisp comunes para un programador de Windows/C++

Obtengo el lenguaje Lisp con bastante facilidad, pero tengo problemas para desarrollar la mecánica del desarrollo. Uno de mis problemas es lidiar con Emacs. No tengo experiencia con él y lo encuentro generalmente confuso con comandos difíciles de encontrar/descubrir.

preguntas específicas:

  • tengo la REPL, pero no lo entiendo muy bien cómo puedo utilizarla de manera eficaz. Cuando necesito cambiar una función, tengo que volver a escribir el defun y hacer cambios (tedioso y propenso a errores). ¿Cómo puedo hacer esto mejor?
  • ¿Cómo puedo obtener desde que ingreso el código en el REPL hasta tener realmente un programa? Estoy acostumbrado al modelo C donde tienes archivos de código que puedes revisar, editar y recompilar. Sé que Lisp tiene algo similar (a través de la función de carga), pero ¿cómo se obtiene una función que acabo de definir y probar en un archivo para guardar? Espero que haya un método mejor que mi selección actual + copiar + pegar.
  • ¿Cómo se solucionan los errores? ¿Hay alguna posibilidad de entrar en el código como lo haría con otros idiomas?
  • Siempre que la expresión S sea válida, no recibiré ningún error al ingresar un (defun ...). No es hasta que intento usarlo que descubro que no es válido. ¿Hay alguna forma de obtener errores antes (es decir, compilar el código)?
  • ¿Hay algún IDE que me resulte más familiar o que me permita jugar con el idioma más fácilmente?
  • ¿Debo cambiar a aprender Scheme en su lugar?

¡Cualquier consejo sería muy apreciado!

+1

Es posible que también desee examinar Clojure; es un ceceo que opera en la JVM y tiene una buena interoperabilidad. con Java. Todavía no he trabajado con eso, pero he visto algunas conferencias y se ve bien. – paul

Respuesta

5

-Me sale el REPL, pero no entiendo cómo puedo usarlo efectivamente. Cuando I necesito cambiar una función tengo que vuelva a escribir el defun y realice los cambios (tedioso y propenso a errores). ¿Cómo puedo hacer esto mejor?

-¿Cómo puedo obtener el código en REPL para tener un programa? Estoy acostumbrado al modelo C donde tiene archivos de código que puede revisar, editar y volver a compilar. Sé que lisp tiene algo similar (a través de la función de carga ), pero ¿cómo se obtiene una función que acabo de definir y probar en un archivo que se guardará? Estoy esperando hay un mejor método que mi actual seleccionar + copiar + pegar.

Cargar SLIME. Ingrese el código en su archivo .lisp, y luego ejecute slime-eval-buffer para cargar todo su código en Lisp. Entonces, para una función específica estás pirateando C-e, C-j para redefinirlo en tu ejecución de Lisp.

-¿Cómo se resuelven los errores? ¿Hay alguna posibilidad de entrar en el código como lo haría con otros idiomas?

Sí.(trace 'my-function) - o alguna variante de eso - y cuando se llama a my-function, irrumpirá en el depurador.

-Con tal que la expresión S sea válida, no obtengo ningún error al ingresar un (defun ...). No es hasta que intento usarlo que descubro que no es válido. ¿Hay alguna forma de obtener errores antes (es decir, compilar el código)?

Hasta cierto punto, eso es una característica de los lenguajes dinámicos (Python, Perl, Ruby, Lisp, etc.). Pruebe SBCL para una mejor comprobación de errores.

- ¿Hay algún IDE que me resulte más familiar o que me permita jugar con el idioma más fácilmente?

Emacs es IDE gratuito para Lisp. Allegro tiene una edición gratuita, creo; Sin embargo, nunca lo intenté ...

- ¿Debo cambiar a Learning Scheme?

Nah, Scheme no es un lenguaje tan pragmático.

1

Soy un experimentado programador de Windows/Web de C++/.NET/Java tratando de aprender (común) Lisp. Estoy leyendo Practical Common Lisp y estoy usando SLIME.

También se puede usar el LispWorks Personal Edition para aprender Lisp. Tiene algunas limitaciones y el producto completo es comercial, pero es bastante más fácil de usar.

Recibo el REPL, pero no entiendo cómo puedo usarlo efectivamente. Cuando necesito cambiar una función, tengo que volver a escribir el defun y hacer cambios (tedioso y propenso a errores). ¿Cómo puedo hacer esto mejor?

El REPL tiene un historial. Con los comandos del teclado, puede obtener una entrada anterior y cambiarla. Aparte de eso, solo edite un archivo Lisp y compile el código desde allí. En Lisp puedes compilar/evaluar expresiones y definiciones individuales. IDE típicos como SLIME, LispWorks o Allegro CL le permiten ejecutar código también desde ventanas de texto Lisp normales, además de ejecutar expresiones en REPLA (también conocido como Listener).

¿Cómo obtengo el código en el REPL para tener realmente un programa? Estoy acostumbrado al modelo C donde tienes archivos de código que puedes revisar, editar y recompilar. Sé que Lisp tiene algo similar (a través de la función de carga), pero ¿cómo se obtiene una función que acabo de definir y probar en un archivo para guardar? Espero que haya un método mejor que mi selección actual + copiar + pegar.

Copie y pegue en una cosa. Pero la forma correcta es trabajar desde un archivo de texto en una ventana del editor. Uno puede compilar/cargar expresiones, el buffer del editor o el archivo asociado.

¿Cómo se resuelven los errores? ¿Hay alguna posibilidad de entrar en el código como lo haría con otros idiomas?

Ver STEP, TRACE y relacionados. SLIME, LispWorks y Allegro CL tienen muchas características adicionales.

Mientras la expresión S sea válida, no obtendré ningún error al ingresar a (defun ...). No es hasta que intento usarlo que descubro que no es válido. ¿Hay alguna forma de obtener errores antes (es decir, compilar el código)?

Para muchos casos, uno usa un compilador. El compilador encontrará un rango de errores y también notará cuando algo es inusual (por ejemplo, una función no existe o una variable no se ha definido).

- ¿Hay algún IDE que me resulte más familiar o que me permita jugar con el idioma más fácilmente?

LispWorks, Allegro CL son los mejores en Windows. Hay algunas alternativas como Corman Lisp (no sé si se mantiene en este momento) o incluso Ufasoft Lisp.

¿Debo cambiar a Learning Scheme?

Realmente no.

1

No parece que realmente esté usando SLIME, o al menos no de la manera en que estaba destinado a ser utilizado. ("tiene que volver a escribir el defun", "el modelo C donde tiene archivos de código")

Recomiendo ver algunos screencasts SLIME (o, incluso mejor, ver a un programador Lisp usar SLIME durante unos minutos, si tiene uno práctico). El SLIME webpage has a couple.

+0

Gracias, definitivamente creo que un tutorial sobre SLIME será útil. – davesw

1

Parece que realmente disfrutaría de DrRacket IDE. Racket está más cerca de Scheme que de Common Lisp, pero podrías sumergir los dedos de los pies en la familia Lisp sin la rampa de velocidad del estilo de desarrollo de Emacs.

+0

Esto me parece interesante. Echaré un vistazo a este lenguaje/IDE. – davesw

Cuestiones relacionadas