Quando o lisp surgiu, ele era uma linguagem de programação bastante avançada para a época. Tão avançada que foram necessárias máquinas especialmente projetadas para rodá-lo. O tempo foi passando e as máquinas evoluindo. Hoje podemos rodar lisp em qualquer máquina, em virtualmente qualquer sistema operacional.
Hoje em dia chamamos o interpretador lisp por uma linha de comando, que inclusive podemos passar argumentos através dessa linha de comando:
clisp source.lisp argumento1 argumento2 argumento3 ...
Mas na época que o lisp foi inventado, as linhas de comando eram o próprio lisp e por isso não havia motivo para criar um padrão de como acessar esses argumentos externos. Por esse motivo não há nenhuma norma de como deve ser feita a implementação do acesso a esses argumentos, chamados em C de argv[].
Justamente por não ser regulamentada, muitos tutoriais deixam isso de lado e eu passei um bom tempo me perguntando como acessar esses argumentos através de lisp. Na implementação que eu uso (clisp), é extremamente fácil. Salve esse script:
(print ext:*args*)
(print (first ext:*args*))
(print (second ext:*args*))
E rode-o com:
clisp args.lisp arg1 arg2 arg3 arg4
("arg1" "arg2" "arg3" "arg4")
"arg1"
"arg2"
Se você precisar de todos os argumentos passados, pode usar ext:argv também. Lembrando que isso vale para o clisp, outras implementações provavelmente funcionam de outra forma.