Получение аргументов командной строки в Common Lisp - PullRequest
22 голосов
/ 20 июня 2009

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

Ответы [ 6 ]

26 голосов
/ 20 июня 2009

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

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

18 голосов
/ 20 июня 2009

Я предполагаю, что вы пишете сценарии с 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")
4 голосов
/ 20 июня 2009

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

2 голосов
/ 19 июня 2018

Существует упомянутая библиотека 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), который возвращает два значения: параметры и оставшиеся свободные аргументы.

2 голосов
/ 18 ноября 2013

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

1 голос
/ 04 января 2017

Как видно из https://stackoverflow.com/a/1021843/31615,, каждая реализация имеет свой собственный механизм. Обычный способ справиться с этим - использовать библиотеку-оболочку, предоставляющую вам унифицированный интерфейс.

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

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

...