> On Oct 3, 2017, at 10:31 AM, 'Shakin Billy' via Racket Users
> <[email protected]> wrote:
>
> how do i access the pattern variable var at compile time (phase 1?)
> additional to an answer, could you point me to the right part of the
> documentation? i really couldn't find it.
`var` isn't a `procedure?` during phase 1. It's just a piece of syntax. So your
`cond`, which is evaluated in phase 1, will always fail.
But if you shift the `cond` to phase 0, by putting it inside the syntax
template, it will work:
#lang racket
(require rackunit)
(define inp (open-input-string "12+34"))
(define-syntax (terminal stx)
(syntax-case stx ()
((_ name rx)
(if (pregexp? (syntax->datum #'rx))
#'(define (name)
(regexp-try-match rx inp))
#'(error "Pregexp expected.")))))
(define-syntax (prod stx)
(syntax-case stx ()
((_ prod-name (name var))
#'(cond
((procedure? var) 0)
(else (error 'PROD-ARGUMENTS "Pregexp oder Procedure expected."))))))
(terminal digit #px"\\d")
(check-equal? (prod term (op1 digit)) 0)
(define not-a-procedure 42)
(check-exn exn:fail? (λ () (prod term (op1 not-a-procedure))))
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.