LilyPond Notation Reference: 5.6.1 Substitution function syntax

### 5.6.1 Substitution function syntax

Making a function that substitutes a variable into LilyPond code is easy. The general form of these functions is

>     function =
>     #(define-music-function
>          (arg1 arg2 …)
>          (type1? type2? …)
>        #{
>          …music…
>        #})

where

`argN` | nth argument
`typeN?` | a scheme type predicate for which `argN` must return `#t`.
`…music…` | normal LilyPond input, using `$` (in places where only LilyPond constructs are allowed) or `#` (to use it as a Scheme value or music function argument or music inside of music lists) to reference arguments (eg. ‘`#arg1`’).

The list of type predicates is required. Some of the most common type predicates used in music functions are:

>     boolean?
>     cheap-list?  (use instead of ‘list?’ for faster processing)
>     ly:duration?
>     ly:music?
>     ly:pitch?
>     markup?
>     number?
>     pair?
>     string?
>     symbol?

For a list of available type predicates, see Predefined type predicates. User-defined type predicates are also allowed.

#### See also

Notation Reference: Predefined type predicates.

Extending LilyPond: Music functions.

Installed Files: ‘`lily/music-scheme.cc`’, ‘`scm/c++.scm`’, ‘`scm/lily.scm`’.

#### LilyPond — Notation Reference v2.22.2 (stable-branch).