Allgemein > Allgemeine Diskussion
Scheme
infranator:
--- Zitat ---- (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 ---
Soweit ich weiß sind das Symbols. Das Apostroph verhindert, dass 'SequentialMusic oder 'elemtents e.t.c. von Scheme für Variablen oder Funktionen gehalten werden.
Ich kann das leider auch nicht besser erklären, aber gib mal folgendes in der scheme-sandbox ein:
--- Code: ---(define ls '(1 2 3 4))
guile> ls
(1 2 3 4)
guile> 'ls
ls
guile> 'WurstBrot
WurstBrot
--- Ende Code ---
Wenn Du bei WurstBrot das Apostroph weglässt gibt's Beschwerden.
infranator:
Hallo alle miteinander!
--- Code: ---#(define (group-start-stop mus)
(let ((elts (extract-typed-music mus '(rhythmic-event event-chord))))
(for-each
(lambda (sel)
(let ((m (sel elts)))
(if (music-is-of-type? m 'event-chord)
(set! (ly:music-property m 'elements)
(cons (make-music 'NoteGroupingEvent
'span-direction (sel '(-1 1)))
(ly:music-property m 'elements)))
(set! (ly:music-property m 'articulations)
(cons (make-music 'NoteGroupingEvent
'span-direction (sel '(-1 1)))
(ly:music-property m 'articulations))))))
(list last first)))
mus)
--- Ende Code ---
Das ist mal wieder eine große Herausforderung hier!
Ich habe nach der Funktion "extract-typed-music" in music-functions.scm gesucht:
--- Code: ---#(define-public (extract-typed-music music type)
"Return a flat list of all music with @var{type} (either a single
type symbol or a list of alternatives) inside of @var{music}, not
recursing into matches themselves."
(extract-music
music
(if (cheap-list? type)
(lambda (m)
(any (lambda (t) (music-is-of-type? m t)) type))
(lambda (m) (music-is-of-type? m type)))))
--- Ende Code ---
Das heißt, bei
--- Code: ---(extract-typed-music mus '(rhythmic-event event-chord))
--- Ende Code ---
wird eine nicht verschachtelte Liste von allen rhythmic-events und event-chords in "mus" ausgegeben. Cool!
Davon wird im led-Block nur das letzte und das erste Element bearbeitet.
Was ich noch nicht verstehe ist, wie daraus die resultierende Liste wird.
Ich würde jetzt denken, die Funktion gibt erst das aus, was im led-Block steht, also das bearbeitete erste Element und das bearbeitete letzte Element, und danach die unveränderte "mus"-Liste.
Zum Glück tut sie das nicht, dann würde es ja gar nicht funktionieren :)
Übrigens finde ich die Konstruktionen mit lambda ich immer schwer zu verstehen. Im Prinzip ist "sel = (list last first)", oder?
Könnte man das nicht auch mit let machen?
vg,
infranator
Manuela:
--- Zitat von: iugin am Donnerstag, 1. Mai 2014, 08:39 ---
Ich habe die Tutorials im Lilypond-Handbuch gelesen, aber sobald ich versuche selber etwas zu schreiben, verliere ich mich total.
Ich bin sicher, ich bin in guter Gesellschaft :)
--- Ende Zitat ---
Ich weiß nicht, wie gut meine Gesellschaft ist ;) aber mir geht es haargenau so
iugin:
Hallo Manuela
ich konnte inzwischen mit Scheme etwas anfangen (habe natürlich schon alles wieder vergessen, da ich seit Dezember nichts mehr gebastelt habe). Geholfen haben mir die viele Erklärungen im Forum, aber auch das.
So konnte ich für meine Bedürfnisse immer was machen. Vielleicht hilft dir das ein bisschen.
Liebe Grüsse
Eugenio
Arnold:
Hallo,
nachdem ich schon vor längerer Zeit mich einmal geäußert habe, welche Kapitel des Guile-Handbuchs ich am meisten konsultiere, jetzt noch eine allgemeinere Information, denn für dieses Thema sind zwei Blickwinkel wichtig:
1. Scheme als allgemeines Werkzeug
2. Wie wird Scheme (Erweiterungen mittels Scheme) in Lilypond eingebunden.
Zu diesem zweiten Punkt ein kurzer Abriß über die einzelnen Schritte einer PDF-Erstellung mittels LilyPond:
* Parsen der Eingabedatei, dabei werden vor allem Datenstrukturen angelegt, welche die Musik beschreiben
Hier greifen viele Scheme-Erweiterungen an, auch die musicMap-Funktion.
* Die Musikevents werden abgespielt, und die Engraver erstellen ein »Netzwerk von Grobs (Grafikobjekten)«
Mittlerweile können Engraver auch in Scheme und nicht nur in C programmiert werden. Insgesamt ist das ein Themenbereich, um den man sich eher später kümmert.
* Spezelle Callback-Einsprungpunkte: before-line-breaking und after-line-breaking
diese werden an Grobs angehängt
* Callback-Funktionen für Grob-Eigenschaften
* Backend patchen - wird auch nur äußerst selten nützlich anzuwenden sein
z. Bsp. am Schuß der PDF-Erzeugung in dieser Routine noch ein externes Programm aufrufen, welches den gegenwärtigen Arbeitsspeicherbedarf vom Lilypond-Prozess anzeigt, oder zwei PDF-Dateien erstellen (eine mit und eine ohne Point-And-Click)
Arnold
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln