Here is the minimal example:
1 ]=> (if #f (quasiquote ((unquote if))) (quasiquote (if)))
;Classifier may not be used as an expression: #[classifier-item 12]
2 error> (quasiquote (if))
;Value: (if)
2 error> (quasiquote ((unquote if)))
;Classifier may not be used as an expression: #[classifier-item 12]
3 error> (if #f 'not-run (quasiquote (if)))
;Value: (if)
Based on the predicate, we should not evaluate (quasiquote ((unquote if)))
with the special form if
. The problem trivially also holds for syntax derived from if
like cond
etc.
How to solve with the above problem?