Question

Je connais python auparavant et maintenant j'essaie d'apprendre le common lisp et d'utiliser ccl (clozure common lisp) sous le système Windows.

J'ai trouvé qu'il n'existait pas de moyen pratique d'exécuter un fichier Lisp en Python.J'écris donc un fichier bat pour compiler et exécuter un fichier 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  

Tout se passe bien, mais je ne trouve pas de moyen de transmettre les arguments de la ligne de commande dans le script Lisp.

J'ai essayé un script (test.lisp) comme celui-ci
(defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
Mais le résultat est
D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

Je sais que cette sortie est le résultat de mon fichier bat, mais je ne trouve pas non plus de moyen élégant de transmettre l'argument de ligne de commande dans un script Lisp.

Quelqu'un peut-il m'en dire plus sur la manière de transmettre les arguments ?Je souhaite que la meilleure réponse puisse implémenter quelque chose comme :
test.lisp a b c
et avec une sortie
test.lisp
a
b
c

Toute suggestion est très appréciée.:-)

Était-ce utile?

La solution

J'ai reçu des suggestions d'autres personnes, que je pense vraiment utiles.Je donne le résultat ici, en espérant pouvoir être utile à d'autres.

CCL arrête de traiter les arguments de ligne de commande lorsqu'il rencontre un pseudoargument nommé "-";Tous les arguments suivants sont ensuite disponibles comme valeur de CCL:ARGUMENTS DE LIGNE DE COMMANDE NON TRAITÉS.Cette valeur est une liste de chaînes.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top