Autor Thema: scheme - very basic: quote, unquote, quasiquote bzw ' oder , oder `  (Gelesen 4740 mal)

harm6

  • Member
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.
Zitat
guile> '(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
oder 
Zitat
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:
Zitat
guile> `(1 (+ 2 3) 4)
(1 (+ 2 3) 4)
Mit Komma wird die Addition ausgeführt:
Zitat
guile> `(1 ,(+ 2 3) 4)
(1 5 4)
oder
Zitat
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:
Zitat
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.
Zitat
guile> (list 1 (+ 2 3) 4)
(1 5 4)

Man kann ja mal ein bißchen mit den verschiedenen Möglichkeiten rumspielen ...

Gruß,
  Harm

« Letzte Änderung: Mittwoch, 14. Mai 2014, 21:20 von harm6 »