سؤال

أنا على دراية بيثون قبل والآن أحاول أن تعلم ليسب المشتركة واستخدام كل (كلوزور المشتركة ليسب) تحت نظام ويندوز.

لقد وجدت أنه لا توجد وسيلة مريحة لتشغيل ملف ليسب كما بيثون.لذلك أنا أكتب ملف الخفافيش لتجميع وتشغيل ملف ليسب.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top