2.3. S-Expressionen
Eine S-Expression (symbolic expression, abgekürzt auch sexpr) sind Ausdrücke, die als Liste dargestellt werden, mit anderen Worten Ausdrücke, die von runden Klammern eingerahmt sind. In der englischsprachigen Literatur werden solche Ausdrücke auch als "form" bezeichnet.
Solche Listen/S-Expressionen können drei unterschiedliche semantische Funktionen erfüllen:
Daten
Daten sind semantisch eher passive Komponenten, die der Speicherung von Informationen in unterschiedlichen Formen dienen.
;; Listen als Daten '(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29) '(Miki Francesco Dayoung Daniel Ronak Robin Arevik Tomás Lydia Clemens Dasom) '((Pauline Oliveiros) (Luigi Nono) (Beatriz Ferreira) (Salvatore Sciarrino)) '((c fis cis) (g es) (a gis))
Funktionsaufrufe
Funktionsaufrufe sind im Unterschied zu Daten aktive Teile eines Programms, die dazu dienen können, Daten zu erzeugen, zu transformieren oder irgendwelche Prozesse in Gang zu setzen, wie beispielsweise das Drucken von Informationen oder allgemeinen grafischen Darstellungen auf dem Bildschirm, das Lesen oder Erzeugen von Dateien oder auch das Erzeugen bzw. Abspielen von Klängen.
(* 7 3 4) ;; -> 84 (print "Hallo Welt") ;;; -> "Hallo Welt" (append '(1 2) '(3 4 5)) ;;; -> (1 2 3 4 5)
special forms bzw. macro forms
special forms sind spezielle syntaktische Konstrukte, die die Strukturierung von Programmabläufen ermöglichen, die sich nicht über Funktionsaufrufe realisieren lassen. Bei Common Lisp sind es Listen, die mit folgenden Symbolen beginnen:
block
,catch
,eval-when
,flet
,function
,go
,if
,labels
,let*
,let
,load-time-value
,locally
,macrolet
,multiple-value-call
,multiple-value-prog1
,progn
,progv
,quote
,return-from
,setq
,symbol-macrolet
,tagbody
,the
,throw
undunwind-protect
.
;;; special forms in Common Lisp (if (< 4 5) 'kleiner 'groesser) ;;; -> kleiner (let ((i 3)) i) ;;; -> 3
Ähnlich wie special forms ermöglichen macro forms (oder Makros) spezielle syntaktische Konstrukte. Bei Makros handelt es sich um Definitionen, wie Listen in andere Listen transformiert und dann evaluiert werden. Neben vielen bereits von Common Lisp bereitgestellten Makros ermöglicht das Makro "defmacro" auch die Definition eigener Makros und damit die Erweiterung der Sprache Common Lisp durch neue syntaktische Formen.
;;; macro forms in Common Lisp (cond ((< 2 1) 'kleiner) ((> 2 1) 'groesser) (t 'gleich)) ;;; -> groesser (defun square (x) (* x x)) ;;; -> square