Void Functions
Stan supports a few special statements for printing or for signaling an issue with the program.
Although print
, reject
, and fatal_error
appear to have the syntax of functions, they are actually special kinds of statements with slightly different form and behavior than other functions. First, they are the constructs that allow a variable number of arguments. Second, they are the the only constructs to accept string literals (e.g., "hello world"
) as arguments. Third, they have no effect on the log density function and operate solely through side effects.
The special keyword void
is used for their return type because they behave like variadic functions with void return type, even though they are special kinds of statements built in to the language.
Print statement
Printing has no effect on the model’s log probability function. Its sole purpose is the side effect (i.e., an effect not represented in a return value) of arguments being printed to whatever the standard output stream is connected to (e.g., the terminal in command-line Stan or the R console in RStan).
void
print
(T1 x1,..., TN xN)
Print the values denoted by the arguments x1
through xN
on the output message stream. There are no spaces between items in the print, but a line feed (LF; Unicode U+000A; C++ literal '\n'
) is inserted at the end of the printed line. The types T1
through TN
can be any of Stan’s built-in numerical types or double quoted strings of characters (bytes).
Reject statement
The reject statement has the same syntax as the print statement, accepting an arbitrary number of arguments of any type (including string literals). The effect of executing a reject statement is to throw an exception internally that terminates the current iteration with a rejection (the behavior of which will depend on the algorithmic context in which it occurs).
void
reject
(T1 x1,..., TN xN)
Reject the current iteration and print the values denoted by the arguments x1
through xN
on the output message stream. There are no spaces between items in the print, but a line feed (LF; Unicode U+000A; C++ literal '\n'
) is inserted at the end of the printed line. The types T1
through TN
can be any of Stan’s built-in numerical types or double quoted strings of characters (bytes).
Fatal error statement
The fatal error statement has the same syntax as the print and reject statements, accepting an arbitrary number of arguments of any type (including string literals). The effect of executing a fatal_error statement is to throw an exception internally that terminates the algorithm completely. It can be viewed as an unrecoverable version of reject, and as such should be used only when exiting the algorithm is the only option.
void
fatal_error
(T1 x1,..., TN xN)
Print the values denoted by the arguments x1
through xN
on the output message stream and then exit the currently running algorithm. There are no spaces between items in the print, but a line feed (LF; Unicode U+000A; C++ literal '\n'
) is inserted at the end of the printed line. The types T1
through TN
can be any of Stan’s built-in numerical types or double quoted strings of characters (bytes).