문제

나는 이전에 파이썬에 익숙하고 이제는 공통 LISP를 배우고 Windows 시스템에서 CCL (Clozure Common Lisp)을 사용하려고 노력하고 있습니다.

LISP 파일을 파이썬으로 실행하는 편리한 방법이 없음을 발견했습니다.그래서 나는 PAM 파일을 작성하여 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  
.

모든 것이 잘됩니다. 그러나 명령 줄 인수를 LISP 스크립트로 전달할 수 없습니다.

이와 같이 스크립트 (test.lisp)를 시도했습니다. (defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
그러나 결과는

D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

이 출력이 내 BAT 파일의 결과로 인식하지만 명령 줄 인수를 Lisp 스크립트로 전달하는 우아한 방법을 찾을 수 없습니다.

누구든지 논쟁을 어떻게 통과 할 수 있는지 더 많은 것을 말해 줄 수 있습니까? 나는 가장 좋은 대답이 뭔가를 구현할 수 있기를 바랍니다 :
test.lisp a b c
출력
test.lisp
a
b
c

모든 제안은 매우 높이 평가됩니다.: -)

도움이 되었습니까?

해결책

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top