Deutsches Lilypond Forum (Archiv)
Allgemein => Hilfe beim Einstieg in Lilypond => Thema gestartet von: rJazz am Mittwoch, 14. Oktober 2015, 17:43
-
Hallo,
ich scheitere bei Scheme im Moment noch an der Befehlsverkettung:
\version "2.19.27"
# (define a 204)
#(display a)
#( (define b 124) (display b))
die Ausgabe von a und b funktionieren,
ich bekommen aber (für den Teil für b)
einen Syntaxfehler:
Parsing...
/home/std/Dokumente/python/lilypond/scheme_test.ly:5:2: error: GUILE signaled an error for the expression beginning here
#
( (define b 124) (display b))
204124
Wrong type to apply: #<unspecified>
fatal error: failed files: "/home/std/Dokumente/python/lilypond/scheme_test.ly"
Werden Befehle nicht wie Listenelemente verkettet?
-
Aus dem guile-manual:
— Scheme Syntax: define name value
Create a top level variable named name with value value. If the named variable already exists, just change its value. The return value of a define expression is unspecified.
(Fettdruck von mir)
D.h. in der Liste:
( (define b 124) (display b))
ist der erste Ausduck unspecified.
Insoweit weiß guile nicht was es mit dieser Liste auf sich hat und gibt einen error aus: Wrong type to apply: #<unspecified>
Tatsächlich könntest Du
(begin (define b 124) (display b))
kodieren. Ist aber befremdlich.
Besser:
(let ((b 124))
(display b))
oder
((lambda (b)
(display b)) 124
Siehe auch:
http://lilypondblog.org/2014/05/local-variables-in-scheme-lilypond/ (http://lilypondblog.org/2014/05/local-variables-in-scheme-lilypond/)
HTH,
Harm
-
Wow, das ist nicht trivial. :D
Danke!
-
Eine weitere Syntaxmöglichkeit:
(let ()
(define b 124)
(display b))
Gruß.
Harm
-
Dann aber doch lieber begin, oder? Oder gibts da einen semantischen Unterschied?