繁体   English   中英

将命令行参数传递给Clozure common lisp

[英]pass command line arguments to Clozure common lisp

我以前很熟悉python,现在我试图学习常见的lisp并在Windows系统下使用ccl(clozure common lisp)。

我发现没有一种方便的方法可以将lisp文件作为python运行。 所以我写了一个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
--eval
(progn (load "D:\\\\_play_\\\\test.wx64fsl") (ccl:quit))

我知道此输出是我的bat文件的结果,但是我也找不到找到将命令行参数传递给lisp脚本的好方法。

谁能告诉我更多有关如何传递参数的信息? 我希望最好的答案可以实现以下内容:
test.lisp abc
并带有输出
test.lisp
a
b
c

任何建议都非常感谢。 :-)

我从其他人那里得到了一些建议,我认为这确实有用。 我在这里给出结果,希望对其他人有用。

当CCL遇到一个名为“-”的伪参数时,它将停止处理命令行参数。 然后,以下任何参数都可以用作CCL的值: UNPROCESSED-COMMAND-LINE-ARGUMENTS 该值是字符串列表。

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 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM