|
From: | Urs Liska |
Subject: | Re: scheme with Frescobaldi |
Date: | Tue, 26 Jun 2018 10:45:42 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
Am 26.06.2018 um 02:25 schrieb Freeman
Gilmore:
OK, it probably wasn't such a good idea to use non-atomic examples. Let me try to put it another way: what you have in Frescobaldi is a LilyPond file. This file may include Scheme code, and LilyPond even works if there is *only* Scheme code in the file and no score is even generated. That way you can use LilyPond and Frescobaldi as a tool to experiment with Scheme code. The way to include Scheme in LilyPond is the '#'. Whenever LilyPond encounters this hash it will have the immediately following _expression_ evaluated by Scheme. Essentially the _expression_ is replaced by the resulting value. What you have already noticed is that this Scheme code is not evaluated immediately (as is done on a REPL and what your tutorial seems to assume), but only when compiling the LilyPond file. One more thing to understand is the following: any Scheme _expression_ *evaluates to* something (like (+ 1 2 3) evaluates to 6). In a REPL this value is displayed but in LilyPond/Frescobaldi it is not. If you write #(+ 1 2 3) in a LilyPond file it *will* evaluate to 6 but it only has the effect of placing that value 6 in the LilyPond file, which will have no effect at all. The additional effort you have to make is explicitly print any value you want to inspect to the log window. Scheme provides some functions for that purpose: display, print, pretty-print, and more. #(define my-var 12) #(display my-var) will print '12' to the log window, #(display (+ 1 2 3)) will print '6' Note that display won't add a line break, so when you want to see more than one value you'll want to add #(newline) expressions in between. A final remark: there are many Scheme implementations (or dialects) around, with more or less subtle differences. When you use LilyPond you have a very specific dialect available (the Guile implementation in its version 1.8), plus when starting up LilyPond a number of extra Guile modules and many LilyPond features are automatically added. This means that when you follow a "Scheme tutorial" not necessarily everything will match what you find in LilyPond. [And please allow me a plug: you may find rewarding to have a look at https://scheme-book.ursliska.de, which is far from complete but aims at giving a slow-paced and detailed introduction specifically from a LilyPond perspective] Best Urs
|
[Prev in Thread] | Current Thread | [Next in Thread] |