X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fuser%2Fscheme-tutorial.itely;h=18f79c2d15bfa021aedd3565c9e8100e91fabaf2;hb=1423508c355989fa26a8cfe5985b0d6e1ab0a538;hp=a9b6d65012d8a4d83947664b1d53d6a9e22d264e;hpb=0387f04497978e37b335a8b99eec905499d6ad0f;p=lilypond.git diff --git a/Documentation/user/scheme-tutorial.itely b/Documentation/user/scheme-tutorial.itely index a9b6d65012..18f79c2d15 100644 --- a/Documentation/user/scheme-tutorial.itely +++ b/Documentation/user/scheme-tutorial.itely @@ -7,7 +7,7 @@ version that you are working on. See TRANSLATION for details. @end ignore -@c \version "2.11.61" +@c \version "2.12.0" @node Scheme tutorial @appendix Scheme tutorial @@ -26,7 +26,25 @@ together. This section is a very brief overview of entering data in Scheme. If you want to know more about Scheme, see @uref{http://@/www@/.schemers@/.org}. -The most basic thing of a language is data: numbers, character +LilyPond uses the GNU Guile implementation of Scheme, which is +based on the Scheme @qq{R5RS} standard. If you are learning Scheme +to use with LilyPond, working with a different implementation (or +referring to a different standard) is not recommended. Information +on guile can be found at @uref{http://www.gnu.org/software/guile/}. +The @qq{R5RS} Scheme standard is located at +@uref{http://www.schemers.org/Documents/Standards/R5RS/}. + +The LilyPond installation also includes the Guile implementation of +Scheme. On most systems you can experiment in a Scheme sandbox by +opening a terminal window and typing @q{guile}. On some systems, +notably Windows, you may need to set the environment variable +@code{GUILE_LOAD_PATH} to the directory @code{../usr/shr/guile/1.8} +in the LilyPond installation (for the full path to this directory +see @ref{Other sources of information}). Alternatively, Windows +users may simply choose @q{Run} from the Start menu and enter +@q{guile}. + +The most basic concept in a language is data typing: numbers, character strings, lists, etc. Here is a list of data types that are relevant to LilyPond input. @@ -70,7 +88,7 @@ respectively. In a music file, snippets of Scheme code are introduced with the hash -mark @code{#}. So, the previous examples translated in LilyPond are +mark @code{#}. So, the previous examples translated to LilyPond are @example ##t ##f @@ -81,6 +99,35 @@ is a string" @end example +Note that LilyPond comments (@code{%} and @code{%@{ %@}}) cannot +be used within Scheme code. Comments in Guile Scheme are entered +as follows: + +@example +; this is a single-line comment + +#! + This a (non-nestable) Guile-style block comment + But these are rarely used by Schemers and never in + LilyPond source code +!# +@end example + +Multiple consecutive scheme expressions in a music file can be +combined using the @code{begin} operator. This permits the number +of hash marks to be reduced to one. + +@example +#(begin + (define foo 0) + (define bar 1)) +@end example + +If @code{#} is followed by an opening bracket, @code{(}, as in +the example above, the parser will remain in Scheme mode until +a matching closing bracket, @code{)}, is found, so further +@code{#} symbols to introduce a Scheme section are not required. + For the rest of this section, we will assume that the data is entered in a music file, so we add @code{#}s everywhere. @@ -252,22 +299,24 @@ We can use it to create new commands: @c Check this is a valid example with skylining @c It is - 'padding still works + @lilypond[quote,verbatim,ragged-right] -tempoMark = #(define-music-function (parser location padding marktext) - (number? string?) +tempoPadded = #(define-music-function (parser location padding tempotext) + (number? string?) #{ - \once \override Score . RehearsalMark #'padding = $padding - \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) - \mark \markup { \bold $marktext } + \once \override Score.MetronomeMark #'padding = $padding + \tempo \markup { \bold $tempotext } #}) \relative c'' { - c2 e - \tempoMark #3.0 #"Allegro" - g c + \tempo \markup { "Low tempo" } + c4 d e f g1 + \tempoPadded #4.0 #"High tempo" + g4 f e d c1 } @end lilypond + Even music expressions can be passed in: @lilypond[quote,verbatim,ragged-right]