передать аргументы командной строки в общий шлюз Clozure - PullRequest
2 голосов
/ 31 марта 2011

Раньше я был знаком с python, и сейчас я пытаюсь изучить общий lisp и использую ccl (clozure common lisp) в системе Windows.

Я обнаружил, что нет удобного способа запустить файл lisp, так какпитон.Поэтому я пишу bat-файл для компиляции и запуска 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<br> --eval<br> (progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))
Я знаю, что этот вывод - результат моего файла bat, но я не могу найти элегантный способ передать аргумент командной строки в lispСценарий, ни один.

Может кто-нибудь сказать мне больше вещей о том, как я могу передать аргументы?Я хотел бы, чтобы лучший ответ мог реализовать что-то вроде:
test.lisp a b c
и с выводом
test.lisp<br> a<br> b<br> c

Любое предложение очень ценится.: -)

1 Ответ

4 голосов
/ 02 апреля 2011

У меня есть предложение от других, которое, я думаю, действительно полезно. Я даю результат здесь, надеюсь, будет полезным для других.

CCL прекращает обработку аргументов командной строки при обнаружении псевдоаргумент с именем "-"; любые последующие аргументы тогда доступны в качестве значения CCL: UNRROCESSED-COMMAND-LINE-ARGUMENTS . Это значение список строк.

console> ccl64 -- these arguments aren\'t processed<br> Welcome to Clozure Common Lisp Version 1.7-dev-r14704M-trunk (FreebsdX8664)!<br> ? *unprocessed-command-line-arguments*<br> ("these" "arguments" "aren't" "processed")

...