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