### 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
>          (parser location 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 `parser` and `location` arguments are mandatory, and are used in some advanced situations as described in the ‘Extending’ manual (see Music functions). For substitution functions, just be sure to include them.

The list of type predicates is also 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`’.

其他语言：deutsch, español, français, italiano, 日本語。
About automatic language selection.

#### LilyPond — Notation Reference v2.18.2 (稳定分支).