+@ruser{Predefined type predicates}.
+
+@seealso
+
+Notation Reference:
+@ruser{Predefined type predicates}.
+
+Installed Files:
+@file{lily/music-scheme.cc},
+@file{scm/c++.scm},
+@file{scm/lily.scm}.
+
+@node Scheme function usage
+@subsection Scheme function usage
+
+Scheme functions can be called pretty much anywhere where a Scheme
+expression starting with @code{#} can be written. You call a scheme
+function by writing its name preceded by @code{\}, followed by its
+arguments. The last argument can't be an optional argument. If there
+are several optional arguments in a row, they are filled with values
+left to right. Once an optional argument can't match input, it and all
+immediately following optional arguments are replaced with their default
+values, and the matching continues with the next non-optional argument.
+
+Apart from places where a Scheme value is required, there are a few
+places where @code{#} expressions are accepted and evaluated for their
+side effects but otherwise ignored. Mostly those are the places where
+an assignment would be acceptable as well.
+
+There are a few special places where an argument matching
+@code{ly:music?} has to be either a music identifier or a music
+expression enclosed in @code{@{}@dots{}@code{@}} or
+@code{<<}@dots{}@code{>>} explicitly, so that possibly following
+optional durations or postevents can't be confused with additional
+arguments. One obvious place is before a @code{ly:duration?}
+predicate. Another is as the last argument of a scheme function when it
+is used in a place where such optional parts could be considered either
+part of the music argument or not.
+
+In those rare cases, you have to delimit your music arguments
+appropriately to spare LilyPond from getting confused.
+
+@node Void scheme functions
+@subsection Void scheme functions
+
+Sometimes a function is only executed for its side effects. In that
+case, using a scheme function means that its value will not usually be
+considered:
+
+@example
+noPointAndClick =
+#(define-scheme-function
+ (parser location)
+ ()
+ (ly:set-option 'point-and-click #f))
+...
+\noPointAndClick % disable point and click
+@end example
+
+@node Music functions
+@section Music functions