2009-06-20 17 views

risposta

16

Suppongo che si stia scrivendo con CLisp. È possibile creare un file contenente

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

renderlo eseguibile eseguendo

$ chmod 755 <filename> 

esecuzione dà

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

il link in questo post non è più valido. :( – masukomi

+0

questo è super bello, ma come posso creare dati dalle stringhe? La mia funzione è usata per input come questo (unique '(abccdddef)) e non funziona con le stringhe: O .. ho provato a (mapcar # 'make-symbol * args *) ma questo non sembra fare il lavoro –

24

http://cl-cookbook.sourceforge.net/os.html fornisce una certa comprensione

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

è quello che stai cercando, penso.

+0

(o FOO nil) è equivalente a FOO, non è vero? –

+1

Sì, ma quando il tuo FOO legge in modo condizionale, è, probabilmente, bello avere un fall-back. Ma, allora, il valore di (o) è, non del tutto sorprendente, NIL (proprio come il valore di (e) è T). – Vatine

4

Stai parlando CLISP o GCL? Sembra che in GCL gli argomenti della riga di comando vengano passati in si::*command-args*.

2

In SBCL, è possibile utilizzare sb-ext: * posix-argv * per ottenere l'argv dal comune script lisp. Sb-ext: * posix-argv * è una lista che contiene tutti gli argomenti, il primo argomento è il nome del file script.

+0

Non sono sicuro che funzioni più, ricevo il messaggio di errore "Simbolo" POSIX-ARGV "non trovato nel pacchetto SB-EXT. ' – Langston

+0

dovrebbe essere sb-ext: * posix-argv *, nel vecchio testo, \ * qualcosa \ * ha funzionato come stile. Mi dispiace. –

1

Come visto in https://stackoverflow.com/a/1021843/31615, ogni implementazione ha il proprio meccanismo. Il solito modo di gestire questo è usare una libreria wrapper che presenta un'interfaccia unificata.

Tale libreria può fornire ulteriore assistenza non solo nella lettura delle cose, ma anche nella loro conversione e nell'erogazione di utili all'utente. Un pacchetto abbastanza completo è CLON (da non confondere con CLON o CLON, scusate), lo Command Line Options Nuker, che porta anche una vasta documentazione. Ce ne sono altri, tuttavia, se le tue esigenze fossero più leggere, ad esempio command-line-arguments e apply-argv.

I pacchetti in quicklisp per questi sono denominati net.didierverna.clon, command-line-arguments e apply-argv, rispettivamente.