<HTML><FONT FACE=arial,helvetica><FONT  SIZE=2 FAMILY="SANSSERIF" FACE="Arial" LANG="0">Several months ago I posted a query regarding matching literals in macros, for which the answer was to use syntax-case* with 'module-or-top-identifier=?'. For my problem at the time, this solved the problem.<BR>
<BR>
But a curious point for me, was that I had a problem symbols which were, also bound MzScheme _values_. 'or' and 'and' seemed to work just fine. I think, mistakenly, I concluded that this was a problem for value bindings, but not syntactic bindings. I say this because, while 'or' and 'and' work just fine, with-or-without the use of 'module-or-top-identifier=?', "class" fails even with the use of 'module-or-top-identifier=?'. Now I am just confused ;)<BR>
<BR>
The module:<BR>
<BR>
(module ex mzscheme<BR>
  (provide test)<BR>
  <BR>
  (require-for-syntax (lib "stx.ss" "syntax"))<BR>
  <BR>
  (define-syntax (test stx)<BR>
    (syntax-case* stx (- or class) module-or-top-identifier=?<BR>
      ((_ (- a b))<BR>
       (syntax '(subtract a b)))<BR>
      ((_ (class a b))<BR>
       (syntax '(matched a b)))<BR>
      ((_ (or a b))<BR>
       (syntax '(intersection a b)))<BR>
      ((_ (op a b))<BR>
       (syntax '(op a b)))))<BR>
  )<BR>
<BR>
This follows the early proposed solution, and hence,<BR>
  (test (or 1 5)) ==&gt; (intersection 1 5)<BR>
And, of course, the original "problem"<BR>
  (test (- 1 5))<BR>
produces "(subtract 1 5)" as intended.<BR>
<BR>
But curiously, <BR>
  (test '(class 1 5))<BR>
produces "(class 1 5)"<BR>
rather than the (intended--for this silly test) "(matched 1 5)".<BR>
<BR>
As a work around, I am simply coercing the syntax object into a datum, and testing whether this eq?'s 'class. But is there a better way to deal with this?<BR>
<BR>
I have tested this with both v202 and v203, with the same results.<BR>
<BR>
Jim<BR>
<BR>
<BR>
</FONT></HTML>