Tracks
/
Common Lisp
Common Lisp
/
Lehrplan
/
Mehrere Werte
Me

Mehrere Werte in Common Lisp

3 Übungen

Über Mehrere Werte

In Common Lisp kann eine Funktion nicht nur einen Wert zurückgeben, sondern mehrere Werte. Zum Beispiel gibt floor, das in Richtung Null abrundet, zwei Werte zurück: Der erste ist der gerundete Wert und der zweite der Rest.

(floor 3.5) ; => 3
            ;    0.5

(Wir zeigen mehrere Rückgabewerte auf getrennten Zeilen der Ausgabe.)

Mehrere Werte zurückgeben

Wenn eine Funktion mehrere Werte zurückgeben soll, verwendest du den values-Accessor:

(defun three-numbers () (values 1 2 3))
(three-numbers) ; => 1
                ;    2
                ;    3

Wenn du eine Liste von Werten zurückgeben möchtest, kannst du value-list verwenden:

(values-list '(a b c)) ; => a
                       ;    b
                       ;    c

Umgang mit mehreren Werten

Wenn dich nur der erste Wert interessiert, musst du nichts Besonderes tun, die Sprache kümmert sich darum:

(+ (values 1 2 3) (values 10 20 30)) ; => 11

Wenn du aber auf die anderen Werte zugreifen möchtest, brauchst du dafür mehrere Funktionen.

Zwei wichtige Makros sind multiple-value-list und multiple-value-bind. Damit umschließt du etwas, das mehrere Werte zurückgibt, und fängst dabei alle Werte ein. Das erste erzeugt eine Liste aller Werte. Das zweite lässt dich Variablen an die einzelnen Werte binden.

(multiple-value-list (values 1 2 3))                   ; => (1 2 3)
(multiple-value-bind (a b c) (values 1 2 3) 
   (+ a b c)) ; => 6

Beachte, dass die Variablen a, b und c nur innerhalb von multiple-values-bind im Gültigkeitsbereich liegen.

Ein weiteres nützliches Makro ist nth-value. Es funktioniert wie nth für Listen: Es gibt das „n-te“ Element aus einer Menge mehrerer Werte zurück:

(nth-value 0 (values 1 2 3 )) ; => 1
(nth-value 1 (values 1 2 3 )) ; => 2
(nth-value 2 (values 1 2 3 )) ; => 3
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne Mehrere Werte

Das Üben ist gesperrt

Schalte 1 weitere Übung frei, um Mehrere Werte zu üben