Pergunta

Já estou familiarizado com python e agora estou tentando aprender lisp comum e usar ccl (clozure common lisp) no sistema Windows.

Descobri que não existe uma maneira conveniente de executar o arquivo lisp como python.Então eu escrevo um arquivo bat para compilar e executar um arquivo 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  

Tudo corre bem, mas não consigo passar os argumentos da linha de comando para o script lisp.

Eu tentei um script (test.lisp) como este
(defun main() (format t "~{~a~%~}" *command-line-argument-list*) 0 ) (main)
Mas o resultado é
D:\_play_\lispbox-0.7\ccl-1.6-windowsx86\wx86cl64.exe
--eval
(progn (load "D:\\_play_\\test.wx64fsl") (ccl:quit))

Eu sei que essa saída é o resultado do meu arquivo bat, mas também não consigo encontrar uma maneira elegante de passar o argumento da linha de comando para um script lisp.

Alguém pode me dizer mais coisas sobre como posso passar os argumentos?Desejo que a melhor resposta possa implementar algo como:
test.lisp a b c
e com uma saída
test.lisp
a
b
c

Qualquer sugestão é muito apreciada.:-)

Foi útil?

Solução

Recebi algumas sugestões de outras pessoas, que considero muito úteis.Dou o resultado aqui, espero que seja útil para outros.

A CCL interrompe o processamento de argumentos da linha de comando quando encontra um pseudoar argumento chamado "-";Quaisquer argumentos a seguir estão disponíveis como o valor da CCL:ARGUMENTOS DE LINHA DE COMANDO NÃO PROCESSADOS.Esse valor é uma lista de strings.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top