Excuse my ignorance, by why is symbol?? not written using syntax-cases and the `indentifier?' guard?
On Thu, 14 Mar 2024, Zelphir Kaltstahl <zelphirkaltst...@posteo.de> wrote: > Hello Guile Users! > > I am having trouble understanding how the `symbol??` macro from > https://okmij.org/ftp/Scheme/assert-syntax-rule.txt works. > > Here is what I have so far: > > ~~~~start~~~~ > ;; (symbol?? FORM KT KF) > ;; FORM is an arbitrary form or datum. > ;; A symbol? predicate at the macro-expand time. > ;; Expands in KT if FORM is a symbol (identifier), Otherwise, expands in KF. > ;; KT: Continuation/Case in case of true. > ;; KF: Continuation/Case in case of false. > (define-syntax symbol?? > (syntax-rules () > ;; The check is done by first pattern matching against some other > ;; forms, that are not a symbol. > ((symbol?? (x . y) kt kf) kf) ; It's a pair, not a symbol > ((symbol?? #(x ...) kt kf) kf) ; It's a vector, not a symbol > ;; After those things are excluded, the thing might be a symbol. > ((symbol?? maybe-symbol kt kf) > (let-syntax ((test > (syntax-rules () > ((test maybe-symbol t f) t) > ((test x t f) f)))) > (test abracadabra kt kf))))) > ~~~~~end~~~~~ > > So I don't understand why `test` works or how it works to check, whether > `maybe-symbol` is a symbol or not. And I don't understand how `abracadabra` > helps with that, or why it helps, to pass something undefined. > > Can someone help me understand, what is going on there? > > Actually I am trying to understand the whole page, and I got there while > looking > for a good `assert` macro ... rabbit hole and all that. > > Best regards, > Zelphir > > -- > repositories:https://notabug.org/ZelphirKaltstahl -- Olivier Dion oldiob.ca