Подтвердить что ты не робот

Получение аргументов командной строки в Common Lisp

Как я могу получить аргументы командной строки (в частности, в GNU, если есть какие-либо отличия) Common Lisp?

4b9b3361

Ответ 1

Я предполагаю, что вы работаете с CLisp. Вы можете создать файл, содержащий

#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)

Сделайте его выполнимым, запустив

$ chmod 755 <filename>

Запуск он дает

$ ./<filename>
NIL
$ ./<filename> a b c
("a" "b" "c")
$ ./<filename> "a b c" 1 2 3
("a b c" "1" "2" "3")

Ответ 2

http://cl-cookbook.sourceforge.net/os.html предоставляет некоторую проницательность

  (defun my-command-line ()
  (or 
   #+CLISP *args*
   #+SBCL *posix-argv*  
   #+LISPWORKS system:*line-arguments-list*
   #+CMU extensions:*command-line-words*
   nil))

- это то, что вы ищете, я думаю.

Ответ 3

Вы говорите о Clisp или GCL? Похоже, что в GCL аргументы командной строки передаются в si::*command-args*.

Ответ 4

В SBCL мы можем использовать sb-ext: * posix-argv *, чтобы получить argv из общего lisp script. Sb-ext: * posix-argv * - это список, содержащий все аргументы, первый arg - имя файла script.

Ответ 5

Как видно из fooobar.com/info/241887/..., каждая реализация имеет свой собственный механизм. Обычный способ справиться с этим - использовать библиотеку-оболочку, которая представляет вам унифицированный интерфейс.

Такая библиотека может предоставить дополнительную помощь не только в чтении, но и в преобразовании и предоставлении полезного вывода пользователю. Достаточно полный пакет CLON (не путать с CLON или CLON, извините), Параметры командной строки Nuker, в котором также содержится обширная документация, Однако есть и другие, если ваши потребности будут более легкими, например command-line-arguments и apply-argv.

Пакеты в quicklisp для них называются net.didierverna.clon, command-line-arguments и apply-argv соответственно.