Shoji Kuzukami
kuzuk****@manba*****
2003年 12月 12日 (金) 14:37:47 JST
いろいろ調べてみると,goshは, (eqv? anyone1 anyone2) => #t (equal? anyone1 anyone2) => #f ということが起こりうるのですね. もうすこし勉強して改良しました. というかequal?に組み込んでみました. --- src/boolean.c.old 2003-12-12 13:03:08.000000000 +0900 +++ src/boolean.c 2003-12-12 14:29:13.000000000 +0900 @@ -98,6 +98,15 @@ } return FALSE; } + if (SCM_IDENTIFIERP(y) && SCM_SYMBOL(x)){ + ScmObj z; + z = y; + y = x; + x = z; + } + if ( SCM_IDENTIFIERP(x) && SCM_SYMBOL(y) ){ + return SCM_EQ(SCM_OBJ(SCM_IDENTIFIER(x)->name),y); + } if (!SCM_PTRP(x)) return (x == y); cx = Scm_ClassOf(x); cy = Scm_ClassOf(y); さきほど試したところ gosh> (define-syntax hoge (syntax-rules () ((hoge foo ...) (cdr b)))) gosh> (equal? (macroexpand '(hoge bar)) '(cdr b)) => #t となりました.