Wie bekomme ich die Befehlszeilenargumente in (speziell in GNU, wenn es Unterschiede gibt) Common Lisp?Abrufen von Befehlszeilenargumenten in Common Lisp
Antwort
Ich nehme an, dass Sie mit CLisp scripten. Sie können eine Datei
#! /usr/local/bin/clisp
(format t "~&~S~&" *args*)
es von
$ chmod 755 <filename>
ausführbare Stellen enthält, erstellen
Lauf es gibt
$ ./<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 bietet einen Einblick
(defun my-command-line()
(or
#+CLISP *args*
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))
ist das, was Sie suchen, denke ich.
(oder FOO nil) entspricht FOO, nicht wahr? –
Ja, aber wenn du deinen FOO bedingt gelesen hast, ist es möglicherweise gut, einen Fallback zu haben. Aber dann ist der Wert von (oder) nicht völlig überraschend, NIL (genauso wie der Wert von (und) T ist). – Vatine
Sprechen Sie über CLISP oder GCL? Scheint wie in GCL die Befehlszeilenargumente in si::*command-args*
übergeben werden.
In SBCL können wir sb-ext: * posix-argv * verwenden, um das argv aus dem allgemeinen Lisp-Skript zu erhalten. Das sb-ext: * posix-argv * ist eine Liste, die alle Argumente enthält, das erste arg ist das Skript filname.
Ich bin mir nicht sicher, ob das funktioniert, ich bekomme die Fehlermeldung' Symbol 'POSIX-ARGV' im SB-EXT-Paket nicht gefunden. ' – Langston
sollte sb-ext sein: * posix-argv *, im alten Text funktionierte das \ * something \ * als Stil, tut mir leid. –
Wie in https://stackoverflow.com/a/1021843/31615 zu sehen ist, hat jede Implementierung ihren eigenen Mechanismus. Der übliche Weg, um damit umzugehen, ist die Verwendung einer Wrapper-Bibliothek, die Ihnen eine einheitliche Oberfläche bietet.
Eine solche Bibliothek kann weitere Hilfe bieten, um Dinge nicht nur zu lesen, sondern sie auch zu konvertieren und dem Benutzer hilfreiche Ausgaben zu geben. Ein recht vollständiges Paket ist CLON (nicht zu verwechseln mit CLON oder CLON, sorry), das Command Line Options Nuker, welches ebenfalls umfangreiche Dokumentation bringt. Es gibt jedoch andere, sollten Ihre Anforderungen leichter sein, zum Beispiel command-line-arguments und apply-argv. Die Pakete in Quicklisp für diese heißen net.didierverna.clon
, command-line-arguments
bzw. apply-argv
.
- 1. Klassenintrospektion in Common Lisp
- 2. Webentwicklung in Common Lisp
- 3. Vereinigung in Common Lisp
- 4. (komponieren) in Common Lisp
- 5. Statistikpakete für Common Lisp
- 6. Best Common Lisp IDE
- 7. Typspezifizierer in Common Lisp verstehen
- 8. Common Lisp-Übungen/Probleme
- 9. Matrix-Multiplikation in Common Lisp
- 10. Listen in Common Lisp transponieren
- 11. Common Lisp Timer
- 12. Common Lisp Programmatic Schlüsselwort
- 13. Definieren von Setf-Expandern in Common Lisp
- 14. Reset-Zustand in Common Lisp
- 15. Funktion Persistenz in Common Lisp
- 16. Integer-Teilung in Common Lisp?
- 17. Alias-Paketnamen in Common Lisp
- 18. Bäume in Common Lisp zeichnen
- 19. Common Lisp entspricht C enums
- 20. Common Lisp: Was bedeutet # + null?
- 21. Probleme mit ltk (common lisp)
- 22. Common Lisp entspricht der Hauptfunktion von Haskell?
- 23. Verbinden von .NET mit Common Lisp
- 24. Common LISP auf iPhone/iOS
- 25. Common Lisp Fehler nicht verstanden
- 26. Einen Typ in Common Lisp löschen
- 27. Python enumerate() analog in Common Lisp
- 28. Schreiben eines ++ Makros in Common Lisp
- 29. abrollen/Splat Argumente in Common Lisp
- 30. Wie man Musterabgleich in Common Lisp macht
der Link in diesem Beitrag ist nicht mehr lebensfähig. :( – masukomi
das ist super cool. Aber wie kann ich daten aus den strings? Meine funktion verwendet zu inputs wie diese (unique '(abccdddef)) und es funktioniert nicht mit strings: O .. ich habe versucht (mapcar # 'make-symbol * args *) aber das scheint den Job nicht zu erledigen –