Pfad definition mit Wiederholungen (gelöst)

Begonnen von Manuela, Mittwoch, 5. Juli 2023, 11:53

« vorheriges - nächstes »

Manuela

Wenn man einen Pfad definiert, 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?
Danke für eure Hilfe
viele Grüße
-- Manuela

Arnold

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

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela

Jean Abou Samra

» ,@ « 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