LilyPond Notation Reference: A.21 Predefined type predicates

## A.21 Predefined type predicates

Predicates return `#t` when their argument is of the named type and `#f` if it isn’t.

### R5RS primary predicates

Primary predicates can be applied to any expression. They can be used on their own as predicates for LilyPond functions. The predicates here are part of the Scheme standard R5RS.

Type predicate | Description
--- | ---
`boolean?` | boolean
`char?` | character
`complex?` | complex number
`eof-object?` | end-of-file object
`input-port?` | input port
`integer?` | integer
`list?` | list (use `cheap-list?` for faster processing)
`null?` | null
`number?` | number
`output-port?` | output port
`pair?` | pair
`port?` | port
`procedure?` | procedure
`rational?` | rational number
`real?` | real number
`string?` | string
`symbol?` | symbol
`vector?` | vector

### R5RS secondary predicates

Secondary predicates are only applicable to specific expressions (for example, to numbers). They will throw a type error when applied to expressions they are not intended for. The predicates here are part of the Scheme standard R5RS.

Type predicate | Description
--- | ---
`char-alphabetic?` | alphabetic character
`char-lower-case?` | lower-case character
`char-numeric?` | numeric character
`char-upper-case?` | upper-case character
`char-whitespace?` | whitespace character
`even?` | even number
`exact?` | exact number
`inexact?` | inexact number
`negative?` | negative number
`odd?` | odd number
`positive?` | positive number
`zero?` | zero

### Guile predicates

These predicates are defined by Guile but are not part of a Scheme standard.

Type predicate | Description
--- | ---
`hash-table?` | hash table

### LilyPond scheme predicates

These predicates are only available within LilyPond and defined in Scheme.

Type predicate | Description
--- | ---
`boolean-or-symbol?` | boolean or symbol
`cheap-list?` | list (use this instead of `list?` for faster processing)
`color?` | color
`fraction?` | fraction, as pair
`grob-list?` | list of grobs
`index?` | non-negative integer
`integer-or-markup?` | integer or markup
`key?` | index or symbol
`key-list?` | list of indexes or symbols
`key-list-or-music?` | key list or music
`key-list-or-symbol?` | key list or symbol
`markup?` | markup
`markup-command-list?` | markup command list
`markup-list?` | markup list
`moment-pair?` | pair of moment objects
`number-list?` | number list
`number-or-grob?` | number or grob
`number-or-pair?` | number or pair
`number-or-string?` | number or string
`number-pair?` | pair of numbers
`number-pair-list?` | list of number pairs
`rational-or-procedure?` | an exact rational or procedure
`rhythmic-location?` | rhythmic location
`scale?` | non-negative rational, fraction, or moment
`scheme?` | any type
`string-or-music?` | string or music
`string-or-pair?` | string or pair
`string-or-symbol?` | string or symbol
`symbol-list?` | symbol list
`symbol-list-or-music?` | symbol list or music
`symbol-list-or-symbol?` | symbol list or symbol
`void?` | void

### LilyPond exported predicates

These predicates are only available within LilyPond and usually defined in C++.

Type predicate | Description
--- | ---
`ly:book?` | book
`ly:box?` | box
`ly:context?` | context
`ly:context-def?` | context definition
`ly:context-mod?` | context modification
`ly:dimension?` | dimension, in staff space
`ly:dir?` | direction
`ly:dispatcher?` | dispatcher
`ly:duration?` | duration
`ly:event?` | post event
`ly:font-metric?` | font metric
`ly:grob?` | graphical (layout) object
`ly:grob-array?` | array of grobs
`ly:grob-properties?` | grob properties
`ly:input-location?` | input location
`ly:item?` | item
`ly:iterator?` | iterator
`ly:lily-lexer?` | lily-lexer
`ly:lily-parser?` | lily-parser
`ly:listener?` | listener
`ly:moment?` | moment
`ly:music?` | music
`ly:music-function?` | music function
`ly:music-list?` | list of music objects
`ly:music-output?` | music output
`ly:otf-font?` | OpenType font
`ly:output-def?` | output definition
`ly:page-marker?` | page marker
`ly:pango-font?` | pango font
`ly:paper-book?` | paper book
`ly:paper-system?` | paper-system Prob
`ly:pitch?` | pitch
`ly:prob?` | property object
`ly:score?` | score
`ly:skyline?` | skyline
`ly:skyline-pair?` | pair of skylines
`ly:source-file?` | source file
`ly:spanner?` | spanner
`ly:spring?` | spring
`ly:stencil?` | stencil
`ly:stream-event?` | stream event
`ly:transform?` | coordinate transform
`ly:translator?` | translator
`ly:translator-group?` | translator group
`ly:undead?` | undead container
`ly:unpure-pure-container?` | unpure/pure container

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