Saltar al contenido

Ejecutar una función Common Lisp desde un símbolo del sistema de Terminal

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *