[racket] how does equal? determine with syntax objects?

From: Alexander D. Knauth (alexander at knauth.org)
Date: Thu Aug 7 21:44:30 EDT 2014

On Aug 7, 2014, at 8:53 PM, Matthias Felleisen <matthias at ccs.neu.edu> wrote:

> Here are some examples: 
>>> (equal? #'(lambda (x) x) #'(lambda (x) x))
>> #f

For these the source locations would still be different.

>>> (define so #'(lambda (x) x))
>>> (equal? so so)
>> #t

For these they are eq?.

Does equal? simply use eq? for syntax objects?
This example says probably, or am I still missing something?
(define stx #'(lambda (x) x))
(equal? stx (datum->syntax stx (syntax-e stx) stx stx stx))

> Are syntax objects mutable? If so, how would you define a function like eq? say syntax-eq? without using the built-in equality? 
> Are syntax objects immutable? Why should they be immutable? How does equal? work on such structures normally? 

I was under the impression that syntax objects were immutable, but I don’t really know.
And anyway, for mutable vectors, strings, byte-strings, and structs, equal? still checks each element.  

> See HtDP on extensional and intensional equality. — Matthias

Where?  I have read a lot of HtDP, and looked at it again just now, but I don’t remember anything about this, and couldn’t find anything either.  
In the BSL docs for eq? and eqv? it mentions extensional and intensional, but doesn’t explain anything.  
In Realm of Racket there was a bit about that, but that doesn’t really tell me anything about syntax objects.  

> On Aug 7, 2014, at 5:58 PM, Alexander D. Knauth wrote:
>> How does equal? determine whether two syntax objects are equal?
>> Does it simply use eq?, or does it check the syntax-e, lexical context, srcloc and properties?  
>> ____________________
>> Racket Users list:
>> http://lists.racket-lang.org/users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140807/1c7e6032/attachment.html>

Posted on the users mailing list.