Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: Manuela am Mittwoch, 5. Juli 2023, 11:53

Titel: Pfad definition mit Wiederholungen (gelöst)
Beitrag von: Manuela am Mittwoch, 5. Juli 2023, 11:53
Wenn man einen Pfad definiert (https://lilypond.org/doc/v2.24/Documentation/notation/graphic), wobei gewisse Elemente wiederholt werden sollen, wäre es praktisch, wenn man eine Variable definieren könnte, die in die Pfaddefinition eingefügt werden kann.

Der folgende Code funktioniert, solange die Variablendefinition nur aus einem Paar besteht.
\version "2.25.4"

#(define
  elt
  '(rlineto 25 -46)
  )

#(define
  testpfad
  `(
     (moveto 0 0)
     (rlineto 25 -46)
     (rlineto 0 -39)
     (rlineto -12 0)
     (rlineto 0 -62)
     (rlineto 12 0)
     ,elt
     (moveto 50 50)
     ,elt
     ))

\markup \path #0 #testpfad

Mit einer zweiten Zeile funktioniert es nicht mehr

\version "2.25.4"

#(define
  elt
  '(rlineto 25 -46)
   (rlineto 0 -39)
  )

#(define
  testpfad
  `(
     (moveto 0 0)
     (rlineto 25 -46)
     (rlineto 0 -39)
     (rlineto -12 0)
     (rlineto 0 -62)
     (rlineto 12 0)
     ,elt
     (moveto 50 50)
     ,elt
     ))

\markup \path #0 #testpfad

ergibt folgenden Fehlercode
source expression failed to match any pattern in form (define elt (quote (rlineto 25 -46)) (rlineto 0 -39))
test.ly:16:2: Fehler: Guile signaled an error for the expression beginning here
#
 (define

Unbound variable: elt
test.ly:30:19: Fehler: Guile signaled an error for the expression beginning here
\markup \path #0 #
                  testpfad
Unbound variable: testpfad


Ist es möglich, eine Variable so zu definieren, dass sie eingefügt werden kann? Geht das mit Scheme überhaupt?
Titel: Antw:Pfad definition mit Wiederholungen
Beitrag von: Arnold am Donnerstag, 6. Juli 2023, 09:01
Hallo Manuel,

der Scheme-Befehl append verbindet mehrere Listen zu einer Liste.

Ohne es ausprobiert zu haben, wohl so:
#(define elt
  '((rlineto 25 -46)
    (rlineto 0 -39)
   )
 )

#(define testpfad
  (append
    '((moveto 0 0)
      (rlineto 25 -46)
      (rlineto 0 -39)
      (rlineto -12 0)
      (rlineto 0 -62)
      (rlineto 12 0))
    elt
    '((moveto 50 50))
    elt
  )
 )

Arnold
Titel: Antw:Pfad definition mit Wiederholungen
Beitrag von: Manuela am Donnerstag, 6. Juli 2023, 13:55
Das klappt, herzlichen Dank, Arnold!
Titel: Antw:Pfad definition mit Wiederholungen (gelöst)
Beitrag von: Jean Abou Samra am Dienstag, 11. Juli 2023, 14:02
» ,@ « statt » , « funktioniert auch:

\version "2.25.6"

#(define
  elt
  '((rlineto 25 -46)
    (rlineto 0 -39))
  )

#(define
  testpfad
  `(
     (moveto 0 0)
     (rlineto 25 -46)
     (rlineto 0 -39)
     (rlineto -12 0)
     (rlineto 0 -62)
     (rlineto 12 0)
     ,@elt
     (moveto 50 50)
     ,@elt
     ))

\markup \path #0 #testpfad

Siehe: https://www.gnu.org/software/guile/manual/html_node/Expression-Syntax.html

Jean