2014-11-03 5 views
6

Ich versucheZugriff auf mehrere Werte, die von einer Funktion zurückgegeben werden (z. B. cl: parse-integer)?

(parse-integer "12 3 6" :start 0 :junk-allowed t) 
12 ; 
2 

diese 2 und kehrt nun aus einer Zeichenkette drei Zahlen zu erhalten, was die Zahl ist, wo sie analysiert werden können. So kann ich jetzt geben

(parse-integer "12 3 6" :start 2 :junk-allowed t) 
3 ; 
4 

Aber wie lagere ich den Wert von 2 und 4, dass es zurückgegeben. Wenn ich setq es in eine Variable nur die 12 und 3 gespeichert sind?

Antwort

11

Bitte lesen Sie die "Theorie" here.

Kurz gesagt, können Sie die multiple values mit multiple-value-bind binden:

(multiple-value-bind (val pos) (parse-integer "12 3 6" :start 0 :junk-allowed t) 
    (list val pos)) 
==> (12 2) 

Sie können auch mehrere setfvalues:

(setf (values val pos) (parse-integer "12 3 6" :start 0 :junk-allowed t)) 
val ==> 12 
pos ==> 2 

Siehe auch VALUES Forms as Places.

PS. In Ihrem Fall könnten Sie tun nur

(read-from-string (concatenate 'string 
           "(" 
           "12 3 6" 
           ")")) 

und erhalten die Liste (12 3 6). Dies ist jedoch nicht der effizienteste Weg (weil es unnötigen Speicher reserviert). auch

PPS Siehe:

  1. How to convert a string to list using clisp?
  2. In lisp, how do I use the second value that the floor function returns?
Verwandte Themen