Раньше я был знаком с 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
Любое предложение очень ценится.: -)