Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Samstag, 17. August 2019, 12:46

Titel: Guile: "Missing expression" [Gelöst]
Beitrag von: ingmar am Samstag, 17. August 2019, 12:46
Hallo,

immer wieder erhalte ich aus Guile die Fehlermeldung "Missing expression".

Beispiel:
\version "2.19.83"

mutabor = #(define-scheme-function (arg) (string?)
(let ((result (string-append arg "... aber verändert!")))))
           
beethoven = "Mein Text"
\markup { \mutabor \beethoven }


Was läuft hier falsch?

Danke für die Unterstützung! : - )

--ingmar
Titel: Antw:Guile: "Missing expression"
Beitrag von: Malte am Samstag, 17. August 2019, 13:25
Hallo ingmar,

ein let-Ausdruck hat folgende Form:
(let
  ((var1 wert1)
   (var2 wert2)
   ...
   (varn wertn))
  tuwasmitvar1bisn)

Erst einmal werden einer oder mehreren Variablen Werte zugewiesen (wenn spätere Zuweisungen frühere Variablen verwenden, brauchst du let* statt let), dann können diese in einem Ausdruck verwendet werden, der zurückgegeben wird. Der Ausdruck tuwasmitvar1bisn fehlt bei dir, du definierst zwar result, verwendest es dann aber nicht mehr. Wenn die Funktion result zurückgeben soll, mußt du es auch hinschreiben – oder aber du läßt das mit dem let ganz bleiben ;) Beide Möglichkeiten siehst du im folgenden Code:\version "2.19.83"

mutaborI =
#(define-scheme-function (arg) (string?)
   (let
     ((result (string-append arg "... aber verändert!")))
     result))

mutaborII =
#(define-scheme-function (arg) (string?)
   (string-append arg "... aber verändert!"))

beethoven = "Mein Text"
\markup { \mutaborI \beethoven }
\markup { \mutaborII \beethoven }

Viele Grüße
Malte
Titel: re: Guile: "Missing expression"
Beitrag von: ingmar am Samstag, 17. August 2019, 14:12
Upps, ja... irgendwie logisch.

Das let ist natürlich völlig unnötig.

Danke!!
--ingmar