Domanda

Ho familiarità con Python prima e ora sto cercando di imparare Lisp Common e usando CCL (Clozure Common Lisp) con il sistema Windows.

Ho trovato che non c'è un modo conveniente per eseguire il file lisp come Python.Quindi scrivo un file BAT per compilare ed eseguire un file 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  
.

Tutto va bene, ma non riesco a trovare Anyway per passare gli argomenti della riga di comando nello script LISP.

Ho provato uno script (test.lisp) come questa (defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
. Ma il risultato è
D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

. So che questa output è come il risultato del mio file di pipistrello, ma non riesco a trovare un modo elegante per passare l'argomento della riga di comando in uno script lisp, né.

Qualcuno può dirmi più cose su come posso passare gli argomenti? Vorrei che la migliore risposta possa implementare qualcosa come:
test.lisp a b c
. e con un output test.lisp
a
b
c

Qualsiasi suggerimento è molto apprezzato.: -)

È stato utile?

Soluzione

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")

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top