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: