Deutsches Lilypond Forum (Archiv)

Allgemein => Hilfe beim Einstieg in Lilypond => Thema gestartet von: rJazz am Mittwoch, 14. Oktober 2015, 17:43

Titel: Scheme Syntax
Beitrag 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:

Zitat
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?
Titel: Re: Scheme Syntax
Beitrag von: harm6 am Mittwoch, 14. Oktober 2015, 18:41
Aus dem guile-manual:

Zitat
— 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




Titel: Re: Scheme Syntax
Beitrag von: rJazz am Mittwoch, 14. Oktober 2015, 19:35
Wow, das ist nicht trivial.  :D
Danke!
Titel: Re: Scheme Syntax
Beitrag von: harm6 am Donnerstag, 15. Oktober 2015, 14:02
Eine weitere Syntaxmöglichkeit:
(let ()
  (define b 124)
  (display b))

Gruß.
  Harm
Titel: Re: Scheme Syntax
Beitrag von: fugenkomponist am Donnerstag, 15. Oktober 2015, 17:11
Dann aber doch lieber begin, oder? Oder gibts da einen semantischen Unterschied?