Hallo,
dieser thread bezieht sich auf folgenden post
Zitat von: iugin am Sonntag, 4. Mai 2014, 19:10
- (make-music) ist immer gefolgt von einem Namen gross geschrieben (wie zb. 'SequentialMusic) und 'elements oder 'articulations oder so. Das Apostroph bedeutet, dass sie Liste sind.
Das normale Apostroph:
' bedeutet lediglich, daß der nachfolgende Ausdruck nicht bearbeitet wird.
Z.B.
Zitatguile> '(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
oder
Zitatguile> (cons "a" '(+ 2 3))
("a" + 2 3)
Wenn man aber das rückwärts geneigte Apostroph verwendet:
` so erhält man die Möglichkeit manche Ausdrücke doch verarbeiten zu lassen.
Diese Ausdrücke müssen aber mit einem Komma:
, markiert werden.
Hier passiert erstmal nichts, denn das Komma fehlt:
Zitatguile> `(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
Mit Komma wird die Addition ausgeführt:
Zitatguile> `(1 ,(+ 2 3) 4)
(1 5 4)
oder
Zitatguile> (cons "a" `,(+ 2 3))
("a" . 5)
Das einfache Apostroph bezeichnet also keineswegs eindeutig eine Liste, sondern es hat eine Funktion.
Symbols brauchen auch ein Apostroph, sonst werden sie für einen (mitunter nicht definierten) Bezeichner gehalten.
Beispiele:
Zitatguile> 'symbol
symbol
guile> symbol
#<procedure symbol args>
guile> Symbol
ERROR: Unbound variable: Symbol
ABORT: (unbound-variable)
Ansonsten sind die Zeichen '`, nur Kurzschreibweisen
' -- quote
` -- quasiquote
, -- unquote
'(a b) ist also dasgleiche wie (quote (a b))
Die anderen entsprechend.
Man bemerke den grundsätzlichen Unterschied zu
(list 1 (+ 2 3) 4)
hier wir die Addition ausgeführt, da kein quote-Befehl dies verhindert.
Zitatguile> (list 1 (+ 2 3) 4)
(1 5 4)
Man kann ja mal ein bißchen mit den verschiedenen Möglichkeiten rumspielen ...
Gruß,
Harm