Allgemein > Allgemeine Diskussion
scheme - very basic: quote, unquote, quasiquote bzw ' oder , oder `
(1/1)
harm6:
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.
--- Ende Zitat ---
Das normale Apostroph: ' bedeutet lediglich, daß der nachfolgende Ausdruck nicht bearbeitet wird.
Z.B.
--- Zitat ---guile> '(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
--- Ende Zitat ---
oder
--- Zitat ---guile> (cons "a" '(+ 2 3))
("a" + 2 3)
--- Ende Zitat ---
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:
--- Zitat ---guile> `(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
--- Ende Zitat ---
Mit Komma wird die Addition ausgeführt:
--- Zitat ---guile> `(1 ,(+ 2 3) 4)
(1 5 4)
--- Ende Zitat ---
oder
--- Zitat ---guile> (cons "a" `,(+ 2 3))
("a" . 5)
--- Ende Zitat ---
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:
--- Zitat ---guile> 'symbol
symbol
guile> symbol
#<procedure symbol args>
guile> Symbol
ERROR: Unbound variable: Symbol
ABORT: (unbound-variable)
--- Ende Zitat ---
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.
--- Zitat ---guile> (list 1 (+ 2 3) 4)
(1 5 4)
--- Ende Zitat ---
Man kann ja mal ein bißchen mit den verschiedenen Möglichkeiten rumspielen ...
Gruß,
Harm
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln