Allgemein > Allgemeine Diskussion
Hilfe zum Finden von Lösungsansätzen - scheme Programmierung
fugenkomponist:
Nein, #my-color ist da schon richtig. Was barrio meinte: Innerhalb des Lilypond-Blocks #{ #} nutzen wir per # wieder die Scheme-Syntax und rufen my-color auf. So, wie es ja auch sonst bei \overrides ab und zu passiert.
Gab ein Missverständnis, es ging wohl um my-color vs. mycolor, nicht my-color vs. #my-color (erich hats inzwischen aufgeklärt).
erich:
Hallo allen
--- Code: ---Der "missing link" ist m.E. nicht, fehlende scheme-Kenntnis/-Erfahrung, sondern ein für mich nachvollziehbarer Ablauf für die Suche nach geeigneten Stellen, wo man in der lilypond-Umgebung "anfassen" muß. Also: Von wo und womit beziehe ich die für das Problem relevanten Informationen? Und wohin und womit schiebe ich das Ergebnis meiner Manipulation, damit das Gewünschte draus gemacht wird?
--- Ende Code ---
Das geht mir noch immer so: Ich kenne viele Programmiersprachen von Assembler auf der Z22 und Algol-60, LISP bis Python. Vielleicht liegt darin der Unterschied zwischen mir und harm, dass harm nicht - wie im Gegensatz zu mir - durch eine Unzahl von programmiersprachlichen Paradigmen belastet ist.
Schwierig wird es eben, wenn man sich selbst auf Fehlersuche begibt, wenn man nicht nur etwas hinbekommen will sondern wissen will, warum oder wie etwas geht. Vielleicht helfen mir die Ausführungen von Erik Sandberg weiter, ich werde sie lesen.
Mir fehlt die Möglichkeit, einen Zwischenschritt einzulegen:
Ich würde gerne das, was \displayMusic ausgibt, als dump zur Verfügung haben, das ich außerhalb von LP modifizieren kann und dann unter LP wieder verwenden kann.
Ich habe auch noch nicht entdeckt, wie man Funktionen hintereinander ausführen kann also eine funktionale Verknüpfung bequem programmieren kann.
Aber der anweisungsorientierte Ansatz von LP gefällt mir sehr!
Gruß Erich
fugenkomponist:
--- Zitat von: erich am Sonntag, 28. Februar 2016, 09:20 ---Ich habe auch noch nicht entdeckt, wie man Funktionen hintereinander ausführen kann also eine funktionale Verknüpfung bequem programmieren kann.
--- Ende Zitat ---
Das fänd ich auch interessant; ich kenne so Sachen wie
--- Code: ---increment = (1+)
square x = x * x
squareAndIncrement = increment . square
--- Ende Code ---
aus Haskell (das ist so schon kompletter lauffähiger Code, der Aufruf squareAndIncrement 5 ergibt dann 26; hier ist wohlgemerkt 1+ kein Funktionsname wie in Scheme, sondern die Funktion + schonmal auf das erste Argument 1 angewendet, somit erwartet increment selbst nur noch ein weiteres Argument). Ich habe das Gefühl, dass sowas in Scheme immer auf lambda-Ausdrücke hinausläuft … Die gibts in Haskell auch (und alternativ könnte ich außerdem das Argument wie bei square schon vorher angeben), aber so eine kurze Schreibweise ist doch viel angenehmer auf Dauer.
Edit: Mir ist wieder eingefallen, wie das heißt: Funktionen höherer Ordnung/higher order functions. Sowas gibts in Scheme anscheinend doch, hab zumindest das hier gefunden; compose sieht so aus, als wärs das, was wir suchen (und was in Haskell einfach (.) heißt). Ich bin mir aber nicht sicher, ob/wie ich increment ohne lambda definieren könnte …
2. Edit: Folgendes funktioniert jedenfalls nicht:
--- Code: ---\version "2.19.36"
#(define (increment) (+ 1))
#(display (procedure? increment)) % ##t
#(display (increment 3))
--- Ende Code ---
Achso, das liegt vermutlich daran, dass + beliebig viele Argumente nimmt.
fugenkomponist:
--- Zitat von: erich am Sonntag, 28. Februar 2016, 09:20 ---Ich würde gerne das, was \displayMusic ausgibt, als dump zur Verfügung haben, das ich außerhalb von LP modifizieren kann und dann unter LP wieder verwenden kann.
--- Ende Zitat ---
Mir ist nicht ganz klar, was du hier meinst. Du kannst genau diese Ausgabe in deine LilyPond-Datei reinpacken und noch ein # davor setzen (weil es sich ja um Scheme-Code handelt), schon bekommst du die gleiche Notenausgabe.
Oder ging es darum, wie du in Scheme diese Struktur veränderst? Dafür sind music-map und verwandte Funktionen (mit einem lambda-Ausdruck, der die eigentliche Veränderung ausführt), ly:music-property, ly:music-set-property, music-is-of-type? und einige weitere zuständig. Eine (unvollständige?) Liste solcher Funktionen findet sich in der Internals Reference.
erich:
Hallo fugenkomponist,
--- Zitat ---Du kannst genau diese Ausgabe in deine LilyPond-Datei reinpacken und noch ein # davor setzen (weil es sich ja um Scheme-Code handelt), schon bekommst du die gleiche Notenausgabe.
--- Ende Zitat ---
guter Hinweis, danke!
Gruß Erich
p.s. ich habe das mal ausprobiert; was fehlt ist allesdings das Environment. So taugt es noch nicht als Austauschformat.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln