Frage

Ich war schon früher mit Python vertraut und versuche jetzt, Common Lisp zu lernen und ccl (clozure common lisp) unter Windows zu verwenden.

Ich habe festgestellt, dass es keine bequeme Möglichkeit gibt, eine Lisp-Datei als Python auszuführen.Also schreibe ich eine Bat-Datei, um eine Lisp-Datei zu kompilieren und auszuführen.

@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  

Alles läuft gut, aber ich finde keine Möglichkeit, die Befehlszeilenargumente an das Lisp-Skript zu übergeben.

Ich habe ein Skript (test.lisp) wie dieses ausprobiert
(defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
Aber das Ergebnis ist
D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

Ich weiß, dass diese Ausgabe das Ergebnis meiner Bat-Datei ist, aber ich kann auch keine elegante Möglichkeit finden, das Befehlszeilenargument an ein Lisp-Skript zu übergeben.

Kann mir jemand mehr darüber sagen, wie ich die Argumente weitergeben kann?Ich wünschte, die beste Antwort könnte so etwas implementieren:
test.lisp a b c
und mit einem Ausgang
test.lisp
a
b
c

Jeder Vorschlag wird sehr geschätzt.:-)

War es hilfreich?

Lösung

Ich habe einige Vorschläge von anderen bekommen, die ich für sehr nützlich halte.Ich gebe das Ergebnis hier weiter und hoffe, dass es für andere nützlich ist.

CCL stoppt die Bearbeitung von Befehlszeilenargumenten, wenn es auf ein Pseudoargument namens "-" stößt;Alle folgenden Argumente sind dann als Wert von CCL verfügbar:UNVERARBEITETE BEFEHLSZEILENARGUMENTE.Dieser Wert ist eine Liste von Zeichenfolgen.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top