تمرير وسيطات سطر الأوامر إلى كلوزور المشتركة ليسب
-
14-11-2019 - |
سؤال
أنا على دراية بيثون قبل والآن أحاول أن تعلم ليسب المشتركة واستخدام كل (كلوزور المشتركة ليسب) تحت نظام ويندوز.
لقد وجدت أنه لا توجد وسيلة مريحة لتشغيل ملف ليسب كما بيثون.لذلك أنا أكتب ملف الخفافيش لتجميع وتشغيل ملف ليسب.
@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
كل شيء على ما يرام ، ولكن لا أستطيع العثور على طريقة لتمرير وسيطات سطر الأوامر في البرنامج النصي ليسب.
حاولت النصي (اختبار.ليسب) مثل هذا
(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))
وأنا أعلم أن هذا الإخراج هو نتيجة لملف الخفافيش بلدي،ولكن لا أستطيع أن أجد وسيلة أنيقة لتمرير وسيطة سطر الأوامر في برنامج نصي ليسب ، لا.
يمكن لأحد أن يقول لي المزيد من الأشياء حول كيف يمكنني تمرير الحجج?أتمنى أن أفضل إجابة يمكن أن تنفذ شيئا مثل:
test.lisp a b c
ومع الإخراج
test.lisp
a
b
c
أي اقتراح هو محل تقدير كبير.:-)
المحلول
لقد حصلت على بعض الاقتراحات من الآخرين ، والتي أعتقد أنها مفيدة حقا.أعطي النتيجة هنا ، ونأمل أن تكون مفيدة للآخرين.
يتوقف كل عن معالجة وسيطات سطر الأوامر عندما يواجه حجة زائفة تسمى"--";ثم تتوفر أي وسيطات التالية كما قيمة كل:غير المجهزة-سطر الأوامر-الحجج.تلك القيمة هي قائمة من السلاسل.
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")