Получение аргументов командной строки в Common Lisp
-
06-07-2019 - |
Вопрос
Как я могу получить аргументы командной строки (особенно в GNU, если есть какие-либо различия) в Common Lisp?
Решение
Я предполагаю, что вы пишете сценарии с 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")
Другие советы
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))
это то, что вы ищете, я думаю.
Вы говорите о Clisp или GCL? Похоже, в GCL аргументы командной строки передаются в si :: * command-args *
.
В SBCL мы можем использовать sb-ext: * posix-argv *, чтобы получить argv из общего сценария lisp. Sb-ext: * posix-argv * - список, содержащий все аргументы, первый аргумент - имя файла сценария.
Существует упомянутая библиотека Clon, которая абстрагирует механизмы для каждой реализации, а теперь еще и более простой unix-opts и учебное пособие по кулинарной книге а>. р>
Затем фактический анализ выполняется с помощью (ql:quickload "unix-opts")
(opts:define-opts
(:name :help
:description "print this help text"
:short #\h
:long "help")
(:name :nb
:description "here we want a number argument"
:short #\n
:long "nb"
:arg-parser #'parse-integer) ;; <- takes an argument
(:name :info
:description "info"
:short #\i
:long "info"))
(opts: get-opts)
, который возвращает два значения: параметры и оставшиеся свободные аргументы. Р>
Как видно из https://stackoverflow.com/a/1021843/31615 , каждая реализация имеет свой собственный механизм , Обычный способ справиться с этим - использовать библиотеку-оболочку, которая представляет вам унифицированный интерфейс.
Такая библиотека может оказать дополнительную помощь не только в чтении, но и в конвертации и предоставлении полезного вывода пользователю. Довольно полным пакетом является CLON (не путать с CLON или CLON, извините), Параметры командной строки Nuker , которая также содержит обширную документацию. Однако есть и другие, если ваши потребности будут более легкими, например, аргументы командной строки и apply-argv .
Пакеты в QuickLisp для них называются net.didierverna.clon
, аргументы командной строки
и apply-argv
соответственно . р>