2012-04-28 7 views
13

Christian Queinnec ha escrito una obra maestra llamada LISP In Small Pieces, que presenta once intérpretes Lisp y dos compiladores Lisp.LISP en piezas pequeñas: ¿el mejor entorno LISP para ejecutar código?

Cuando vaya a descargar el código de la página web here - Tiene el comentario:

The programs of this book are available on the net. 
These programs used to run with some Scheme systems around 1994. 

Cualquier idea:

(a) ¿Qué sistemas Esquema éstos corrieron en ese momento, y más en tono rimbombante;

(b) ¿Qué sistemas de esquema se ejecutarán hoy?

+1

¿Por qué no sólo tiene que instalar la raqueta y tratar de ejecutar algunos de los programas? –

+0

Uso astucia https://en.wikipedia.org/wiki/GNU_Guile o Kawa https://en.wikipedia.org/wiki/Kawa_(Scheme_implementation) – jcubic

+0

@jcubic ¿De modo que los programas en este libro funcionaron para usted? – hawkeye

Respuesta

7

Hay muchos programas allí. Hice algunas pruebas para ver qué tan bien podía responder esto sin tener que probarlas individualmente. Hay 131 archivos en el archivo tar con la extensión ".scm". Sin embargo, parece haber programas Scheme con otras extensiones como .bgl. Así que hice una búsqueda de archivos que contenían 'L i S P' en las primeras cinco líneas. Eso produce 173 archivos. Intenté ejecutar todos estos en my preferred Scheme implementation. 31 de estos se ejecutan sin error. Casi todos estos están en el directorio "src". Entonces, los programas específicos del idioma realmente parecen específicos del idioma. Veamos uno de los src/archivos que fallaron, "chap9z.scm". Se está ahogando en define-abbreviation. No sé el origen de este símbolo, pero no está definido en ninguna parte en astucia. Pero todos sus usos podrían ser realizados por el syntax-rules de Guile.

+0

Apuesto a que 'define-abreviación' se define como una macro en otro lugar en la fuente. –

+0

Lo busqué pero no lo encontré. ¡Necesito un grep basado en sexp (en lugar de en línea)! – gcbenison

+0

@gcbeison, parece estar definido en las partes específicas de la plataforma. Por ejemplo, vea 'elk/book.elk', donde se define a través de una llamada a' expand-syntax'. –

5

Algunas implementaciones esquema que existían en 1994, que todavía se vende y mantiene: Scheme 48, Chez Scheme, Gambit, Bigloo, MIT Scheme y SCM.

Probablemente el código de LiSP se ejecutará en otros sistemas Scheme modernos como Guile o Larceny.

Personalmente, recomendaría usar Racket. Lo más probable es que gran parte del código se ejecute en #lang racket sin cambios, y no es obligatorio utilizar [] (pero es posible que su código sea más fácil de leer :). Es probable que las cosas que no funcionan sean fáciles de corregir, y también puede usar la implementación de lenguaje R5RS proporcionada por Racket, que probablemente funcionará para todo el código.

+0

El código (al menos desde el capítulo 1) no se ejecuta 'tal como está' en la raqueta #lang debido a que las celdas de cons no son mutables. – PuercoPop

+1

Probablemente pueda ejecutarlo en el modo 'r5rs' (seleccione ese idioma en DrRacket, use el ejecutable' plt-r5rs', o agregue '#lang r5rs' en la parte superior del archivo). –

2

Las incluidos README estados de archivo:

Estos archivos se probaron con un intérprete de Scheme aumentada con piloto de pruebas de baño (tester.scm), las macros define-sintaxis y define-abreviatura (utilizando paquete de sintaxis-caso Dybvig), y un sistema de objeto: Meroonet (meroonet.scm).

Bigloo, Scheme-> C, Gambit, Elk o SCM se pueden utilizar. Los tres primeros son mejor ya que se puede construir un intérprete especializado que contiene un compilado de Meroonet y compilado de macros higiénicas.

3

(a) ¿Qué sistemas Esquema estos corrió en el momento

El Makefile en el source tarball desde la web del autor tiene objetivos para ejecutar el código bajo bigloo, alces, Gambito, MIT esquema, scheme2c y scm.

El Makefile menciona SCM 4e1 y Bigloo 1.9d como versiones de trabajo conocidas, aunque no las he probado yo mismo. No encontré ninguna mención de versiones específicas para los otros esquemas.

(b) ¿Qué sistemas de esquema funcionarían en la actualidad?

El código en this github repo se ha actualizado para que la casi totalidad de las pruebas en el banco de pruebas pase incluido con la corriente (a partir de 06/2014) versiones de bigloo, Gambito, y el MIT-esquema.

Si solo desea poder ejecutar el código y seguirlo junto con el libro, uno de esos esquemas debería funcionar para usted.

[descripción completa: soy el propietario del repositorio y soy un novato de Scheme. El código en el repositorio está certificado con WOMM, pero su millaje puede variar.]

Si, por otro lado, no está satisfecho con el uso de bigloo/gambit/mit-scheme, no debería ser demasiado difícil agregue soporte para guile/racket/insert-favorite-scheme-here. Utilice uno de los archivos book.* como punto de partida, p. gambit/book.scm o mitscheme/book.mit. Si puede obtener una versión de book.scm para cargar en su esquema favorito, eche un vistazo al objetivo de hacer test.interpreters, y finalmente el objetivo grand.test para verificar que las cosas funcionen como se espera.