;'<<SPEC'
### `macro?` ###
-> Tests for functionality "Evaluate core Robin Expression"
`macro?` evaluates its argument, then evaluates to `#t` if it is a macro,
or `#f` if it is not.
| (macro? (macro (self args env) args))
= #t
Intrinsic macros are macros.
| (macro? macro)
= #t
Literal symbols are not macros, even if they're the name of one.
| (macro? ((macro (self args env) (head args)) macro))
= #f
Numbers are not macros.
| (macro? 5)
= #f
The argument to `macro?` may (naturally) be any type, but there must be
exactly one argument.
| (macro? macro macro)
? abort (illegal-arguments (macro macro))
| (macro?)
? abort (illegal-arguments ())
'<<SPEC'
(require macro?)