Luego de de nuestra larga recopilación de datos pudimos resolver este dilema que pueden tener muchos lectores. Te compartimos la respuesta y esperamos serte de mucha apoyo.
Solución:
El manual de SBCL describe tres opciones útiles
3.3.1 Opciones de tiempo de ejecución
--noinform
Suprima la impresión de cualquier pancarta u otro mensaje informativo al inicio. Esto facilita la escritura de programas Lisp que funcionan limpiamente en las tuberías de Unix. Véase también el
--noprint
y--disable-debugger
opciones
3.3.2 Opciones de nivel superior
--eval command
Después de ejecutar cualquier archivo de inicialización, pero antes de iniciar el ciclo de lectura-evaluación-impresión en la entrada estándar, lea y evalúe el comando dado. Más de uno
--eval
Se puede usar la opción, y todo se leerá y ejecutará, en el orden en que aparecen en la línea de comando.
--load filename
Esto es equivalente a
--eval '(load "filename")'
. La sintaxis especial está destinada a reducir los dolores de cabeza de las citas al invocar SBCL desde scripts de shell.
dado un archivo test.lisp
con contenido
(defun hello-world ()
(print 'hello-world)
(terpri))
podemos hacer esto con SBCL:
$ sbcl --noinform --load test.lisp --eval '(progn (hello-world) (sb-ext:quit))'
HELLO-WORLD
El (progn ... (sb-ext:quit))
se asegura de que el programa termine después de ejecutarlo (hello-world)
. De lo contrario, caerá en el indicador de SBCL. Dado que el código se compila automáticamente en SBCL, la función que está ejecutando ya está compilada en el momento (hello-world)
se ejecuta Si ha compilado el archivo con anterioridad, puede pasar el archivo compilado a --load
. P.ej,
$ sbcl --noinform --load test.fasl --eval '(hello-world)'
HELLO-WORLD
De hecho, dada la equivalencia de --load
a --eval (load "filename")
, puede usar la base del nombre del archivo, y si hay una versión compilada, SBCL debería cargarla, y si no la hay, SBCL cargará el archivo fuente y obtendrá el código compilado de esa manera. Por ejemplo, en lo siguiente, usamos solo --load test
:
$ sbcl --noinform --load test --eval '(hello-world)'
HELLO-WORLD
Lo siguiente es una pasta del primer resultado de Google:
CLIP
Si está utilizando el entorno CLISP Common Lisp, se aplica lo siguiente.
Para compilar un programa llamado test.lisp program en un archivo de bytecode llamado test.fas, haga lo siguiente.
clip -c prueba.lisp
Si desea que se muestre menos salida, haga lo siguiente en su lugar.
clip -q -c prueba.lisp
Para ejecutar el archivo Lisp compilado (o incluso sin compilar, si omite el paso anterior), haga lo siguiente, asumiendo que su función de entrada se llama main. Normalmente, el resultado de la función principal se muestra cuando se realiza, pero el comando (salir) lo impide. La opción de cancelación -on-error evita que clisp caiga en un indicador de depuración y, en su lugar, sale cuando hay un error.
clisp -q -q -on-error abort -x ‘(progn (cargar “prueba”) (principal) (salir))’
Lo acabo de probar en mi terminal Arch Linux y puedes hacer lo siguiente:
$ clisp myprogram.lisp
Esto ejecutará el programa directamente en la terminal. Si desea compilarlo para ejecutarlo más tarde, consulte el bit anterior.
Te mostramos comentarios y calificaciones
No se te olvide dar difusión a esta crónica si lograste el éxito.