Deutsches Lilypond Forum (Archiv)
Allgemein => Allgemeine Diskussion => Thema gestartet von: harm6 am Dienstag, 13. Mai 2014, 22:43
-
Hallo,
dieser thread bezieht sich auf folgenden post
- (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.
guile> '(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
oder
guile> (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:
guile> `(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
Mit Komma wird die Addition ausgeführt:
guile> `(1 ,(+ 2 3) 4)
(1 5 4)
oder
guile> (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:
guile> '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.
guile> (list 1 (+ 2 3) 4)
(1 5 4)
Man kann ja mal ein bißchen mit den verschiedenen Möglichkeiten rumspielen ...
Gruß,
Harm