17.8 Summary of Function Types

Functions may have a void or non-void return type and they may or may not have one of the special suffixes, _lpdf, _lpmf, _lp, or _rng.

Void vs. Non-Void Return

Only functions declared to return void may be used as statements. These are also the only functions that use return statements with no arguments.

Only functions declared to return non-void values may be used as expressions. These functions require return statements with arguments of a type that matches the declared return type.

Suffixed or Non-Suffixed

Only functions ending in _lpmf or _lpdf and with return type real may be used as probability functions in sampling statements.

Only functions ending in _lp may access the log probability accumulator through sampling statements or target += statements. Such functions may only be used in the transformed parameters or model blocks.

Only functions ending in _rng may access the built-in pseudo-random number generators. Such functions may only be used in the generated quantities block or transformed data block, or in the bodies of other user-defined functions ending in _rng.