Pregunta

Estoy familiarizado con Python antes y ahora estoy tratando de aprender a Lisp común y usar CCL (Clozure Common Lisp) en el sistema Windows.

Descubrí que no hay una forma conveniente de ejecutar el archivo Lisp como Python.Así que escribo un archivo de murciélago para compilar y ejecutar un archivo LISP.

@echo off  

set lisp_filename=%~1  
set ccl_path=D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl.exe  

IF "%PROCESSOR_ARCHITECTURE%" == "x86" (  
    set fsl_filename=%lisp_filename:.lisp=.wx32fsl%  
) ELSE (  
    set ccl_path=%ccl_path:wx86cl=wx86cl64%  
    set fsl_filename=%lisp_filename:.lisp=.wx64fsl%  
)  

IF NOT EXIST %fsl_filename% goto compile  

for %%a in ("%lisp_filename%") do (  
    set lisp_timestamp=%%~ta  
)  

for %%a in ("%fsl_filename%") do (  
    set fsl_timestamp=%%~ta  
)  

IF "%fsl_timestamp%" LSS "%lisp_timestamp%" (  
    goto compile  
) ELSE (  
    goto run  
)  


:compile  
REM echo "compile"  
%ccl_path% --eval "(progn (compile-file \"%lisp_filename:\=\\%\") (ccl:quit))"  

:run  
REM echo "run"  
%ccl_path% --eval "(progn (load \"%fsl_filename:\=\\%\") (ccl:quit))"  

:end  

Todo va bien, pero no puedo encontrar a Away para pasar los argumentos de la línea de comando en el script LISP.

Intenté un script (test.lisp) como este
(defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
Pero el resultado es de
D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

Sé que esta salida es como resultado de mi archivo de murciélago, pero no puedo encontrar una forma elegante de pasar el argumento de la línea de comando en un script Lisp, ninguno.

¿Alguien puede decirme más cosas sobre cómo puedo pasar los argumentos? Deseo que la mejor respuesta pueda implementar algo como:

test.lisp a b c
y con una salida
test.lisp
a
b
c

Cualquier sugerencia es muy apreciada.- -)

¿Fue útil?

Solución

I have get some suggestion from others, which I think it's really useful. I give the result here, hope to be useful for other ones.

CCL stops processing command-line arguments when it encounters a pseudoargument named "--"; any following arguments are then available as the value of CCL:UNPROCESSED-COMMAND-LINE-ARGUMENTS. That value is a list of strings.

console> ccl64 -- these arguments aren\'t processed
Welcome to Clozure Common Lisp Version 1.7-dev-r14704M-trunk (FreebsdX8664)!
? *unprocessed-command-line-arguments*
("these" "arguments" "aren't" "processed")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top