Come posso ottenere gli argomenti della riga di comando in (in particolare in GNU, se ci sono delle differenze) Common Lisp?Ottenere argomenti dalla riga di comando in Common Lisp
risposta
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")
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.
(o FOO nil) è equivalente a FOO, non è vero? –
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
Stai parlando CLISP o GCL? Sembra che in GCL gli argomenti della riga di comando vengano passati in si::*command-args*
.
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.
Non sono sicuro che funzioni più, ricevo il messaggio di errore "Simbolo" POSIX-ARGV "non trovato nel pacchetto SB-EXT. ' – Langston
dovrebbe essere sb-ext: * posix-argv *, nel vecchio testo, \ * qualcosa \ * ha funzionato come stile. Mi dispiace. –
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.
- 1. srotolare/argomenti splat in Common Lisp
- 2. (comporre) in Common Lisp
- 3. Stream in Common Lisp?
- 4. Determinazione dell'elenco degli argomenti delle funzioni in Common Lisp
- 5. Passare argomenti dalla riga di comando in uno script tcl
- 6. Stato di reset in Common Lisp
- 7. Esiste un comando per arrestare l'interprete in Common Lisp?
- 8. Divisione di interi in Common Lisp?
- 9. Sviluppo Web in Common Lisp
- 10. Ridenominazione lambda in Common Lisp
- 11. Moltiplicazione matrice in Common Lisp
- 12. Elenco circolare in Common Lisp
- 13. ottenere gli argomenti della riga di comando grezzo in node.js
- 14. Passare gli argomenti nel programma C dalla riga di comando
- 15. Common Lisp definizione pacchetto
- 16. Programmazione ricca di tipo in Common Lisp?
- 17. Esercizi Common Lisp/problemi
- 18. Common Lisp: Perché non la matrice letterale valuta gli argomenti?
- 19. Common lisp gray stream
- 20. Association nel Common Lisp
- 21. sezioni in stile Haskell in Common Lisp
- 22. Trasposizione di elenchi in Common Lisp
- 23. Disegno di alberi in Common Lisp
- 24. Uso di etichette in Common Lisp
- 25. Introspezione di classe in Common Lisp
- 26. Scrittura di una macro ++ in Common Lisp
- 27. Eliminazione di un tipo in Common Lisp
- 28. Ottenere l'immissione della password dalla riga di comando in Python
- 29. argomenti in riga di comando Java
- 30. Argomenti della riga di comando in python.
il link in questo post non è più valido. :( – masukomi
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 –