;'<<SPEC'
<!--
Copyright (c) 2012-2024, Chris Pressey, Cat's Eye Technologies.
This file is distributed under a 2-clause BSD license. See LICENSES/ dir.
SPDX-License-Identifier: LicenseRef-BSD-2-Clause-X-Robin
-->
### `operator?` ###
-> Tests for functionality "Evaluate core Robin Expression"
`operator?` evaluates its argument, then evaluates to `#t` if it is an operator,
or `#f` if it is not.
| (operator? (fexpr (args env) args))
= #t
Intrinsic operators are operators.
| (operator? fexpr)
= #t
| (operator? operator?)
= #t
Literal symbols are not operators, even if they're the name of one.
| (operator? ((fexpr (args env) (head args)) fexpr))
= #f
Numbers are not operators.
| (operator? 5)
= #f
The argument to `operator?` may (naturally) be any type, but there must be
exactly one argument.
| (operator? fexpr fexpr)
? abort (illegal-arguments (fexpr fexpr))
| (operator?)
? abort (illegal-arguments ())
'<<SPEC'
(require operator?)