2009-06-20 10 views

Antwort

16

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") 
+0

der Link in diesem Beitrag ist nicht mehr lebensfähig. :( – masukomi

+0

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 –

24

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.

+0

(oder FOO nil) entspricht FOO, nicht wahr? –

+1

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

4

Sprechen Sie über CLISP oder GCL? Scheint wie in GCL die Befehlszeilenargumente in si::*command-args* übergeben werden.

2

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.

+0

Ich bin mir nicht sicher, ob das funktioniert, ich bekomme die Fehlermeldung' Symbol 'POSIX-ARGV' im SB-EXT-Paket nicht gefunden. ' – Langston

+0

sollte sb-ext sein: * posix-argv *, im alten Text funktionierte das \ * something \ * als Stil, tut mir leid. –

1

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.