Passare le riga di comando Argomenti a Clozure Common Lisp
-
14-11-2019 - |
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.: -)
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")