Pergunta

Como posso obter os argumentos da linha de comando (especificamente no GNU, se houver alguma diferença) Lisp comum?

Foi útil?

Solução

Estou assumindo que você está scripts com Clisp. Você pode criar um arquivo contendo

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

Faça com que seja executável correndo

$ chmod 755 <filename>

Correr dá

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

Outras dicas

http://cl-cookbook.sourceforge.net/os.html fornece algumas dicas

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

É o que você está procurando, eu acho.

Você está falando sobre cliPl ou gcl? Parece que no GCL os argumentos da linha de comando são passados si::*command-args*.

No SBCL, podemos usar o SB-EXT:* POSIX-ARGV* para obter o argv do script LISP comum. O SB-EXT:* POSIX-ARGV* é uma lista que mantém todos os argumentos, o primeiro arg é o script filname.

Existe a biblioteca clon mencionada que abstrai mecanismos para cada implementação e agora também o mais simples Unix-OPTS, e a tutorial sobre o livro de receitas.

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

Então a análise real é feita com (opts:get-opts), que retorna dois valores: as opções e os restantes argumentos livres.

Como visto em https://stackoverflow.com/a/1021843/31615, cada implementação tem seu próprio mecanismo. A maneira usual de lidar com isso é usar uma biblioteca de wrapper que apresenta uma interface unificada para você.

Essa biblioteca pode fornecer mais assistência não apenas a ler as coisas, mas também convertê -las e dar saída útil ao usuário. Um pacote bastante completo é clon (para não ser confundido com clon ou clon, desculpe), o Opções de linha de comando nuker, que também traz uma extensa documentação. Existem outros, porém, suas necessidades devem ser mais leves, por exemplo, Argumentos de linha de comando e Aplicar-ARGV.

Os pacotes em Quicklisp para estes são nomeados net.didierverna.clon, command-line-arguments, e apply-argv, respectivamente.

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