[ << Interfaces for programmers ] | [Top][Contents][Index] | [ LilyPond Scheme interfaces >> ] |
[ < Scheme function usage ] | [ Up : Scheme functions ] | [ Music functions > ] |
2.2.3 Void scheme functions
Sometimes a procedure is executed in order to perform an action rather
than return a value. Some programming languages (like C and Scheme) use
functions for either concept and just discard the returned value
(usually by allowing any expression to act as statement, ignoring the
result). This is clever but error-prone: most C compilers nowadays
offer warnings for various non-“void” expressions being discarded.
For many functions executing an action, the Scheme standards declare the
return value to be unspecified. LilyPond’s Scheme interpreter Guile has
a unique value *unspecified*
that it usually (such when using
set!
directly on a variable) but unfortunately not consistently
returns in such cases.
Defining a LilyPond function with define-void-function
makes
sure that this special value (the only value satisfying the predicate
void?
) will be returned.
noPointAndClick = #(define-void-function () () (ly:set-option 'point-and-click #f)) … \noPointAndClick % disable point and click
If you want to evaluate an expression only for its side-effect and
don’t want any value it may return interpreted, you can do so by
prefixing it with \void
:
\void #(hashq-set! some-table some-key some-value)
That way, you can be sure that LilyPond will not assign meaning to the
returned value regardless of where it encounters it. This will also
work for music functions such as \displayMusic
.
[ << Interfaces for programmers ] | [Top][Contents][Index] | [ LilyPond Scheme interfaces >> ] |
[ < Scheme function usage ] | [ Up : Scheme functions ] | [ Music functions > ] |