9.1.1. Werte und Seiteneffekte

Die Evaluation eines Lisp Ausdrucks kann aus zwei Gründen stattfinden:

  • Ermittlung eines Wertes

    Wie der Name schon sagt, wird in diesem Fall ein Ausdruck aufgerufen, um einen Wert zu ermitteln.

(+ 3 4 5) ;; -> 12

(list 1 2 3 4) ;; -> (1 2 3 4)

(expt 2 5) ;; -> 32

(if (< 2 3) 'kleiner 'groesser) ;; -> kleiner

Wenn es sich um verschachtelte Ausdrücke handelt, werden bei der Evaluation die Ausdrücke von innen nach aussen ausgewertet und das Ergebnis der Evaluation ersetzt den Ausdruck. Erst anschließend wird der nächsthöhere Ausdruck evaluiert. Dieser Vorgang wiederholt sich, bis in der obersten Klammerebene nur noch Atome stehen, die anschließend evaluiert werden und das Gesamtergebnis liefern:

;;; Die Evaluation passiert in mehreren Stufen, bei der sukzessiv die
;;; Ausdrücke von innen nach aussen evaluiert und ihre Ergebnisse an
;;; Stelle des ausgewerteten Ausdrucks eingesetzt werden:

(+ 3 4 (* 7 (- 5 2)))
;;;         |-----|
;;;            v
(+ 3 4 (* 7    3   ))
;;;    |-----------|
;;;          v
(+ 3 4       21     )
|-------------------|
;;;     v

        28
  • Erzeugung eines Seiteneffektes

    Ein Seiteneffekt liegt dann vor, wenn die Evaluation eines Ausdrucks Auswirkungen hat, die ausserhalb des Ausdrucks eine Relevanz besitzen. Hierzu zählen beispielsweise das Spielen einer Note mit einem externen Programm, das Lesen oder Schreiben von Dateien auf der Festplatte, das Definieren oder Setzen einer globalen Variable oder die Ausgabe von Text (beispielsweise in der REPL):

;;; Definition einer globalen Variable

(defparameter *globale-Variable* 34) ;; -> *globale-Variable*

*globale-Variable* ;; -> 34

;;; Verändern des Wertes einer globalen Variable

(setf *globale-Variable* 71) ;;-> 71

*globale-Variable* ;; -> 71

(print "Hallo Welt") ;; -> "Hallo Welt"

results matching ""

    No results matching ""