<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><div><div>On Aug 17, 2014, at 2:29 PM, Carl Eastlund <<a href="mailto:carl.eastlund@gmail.com">carl.eastlund@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><p dir="ltr">Comparing lexical context is a very involved process.  Remember that every syntax object potentially carries context for an unbounded number of symbol names at an unbounded number of phases, since context information can be transferred freely.  Comparing all of them for equivalence would be quite expensive.  You probably want to either decide what subset of that context is relevant to you, or reformulate your solution in a way that does not involve comparing syntax at all.  It's a problematic technique to employ, to say the very least.</p></blockquote><div><br></div><div>Well, if what I want to do is a sort of syntax-object memoizing, where I do something like this:</div><div><br></div><div><div><font face="Courier New">#lang racket/base (require (for-syntax racket/base))</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(module+ test</font></div><div><font face="Courier New">  (require rackunit))</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(begin-for-syntax</font></div><div><font face="Courier New">  (define (syntax=? s1 s2)</font></div><div><font face="Courier New">    ....)</font></div><div><font face="Courier New">  (define (make-stx-dict)</font></div><div><font face="Courier New">    (stx-dict '()))</font></div><div><font face="Courier New">  (struct stx-dict ([alist #:mutable]) #:transparent)</font></div><div><font face="Courier New">  (define (stx-dict-ref! stx-dict key to-set)</font></div><div><font face="Courier New">    (define alist (stx-dict-alist stx-dict))</font></div><div><font face="Courier New">    (define maybe-pair (assoc key alist syntax=?))</font></div><div><font face="Courier New">    (if maybe-pair</font></div><div><font face="Courier New">        (cdr maybe-pair)</font></div><div><font face="Courier New">        (let ([new-val (to-set)])</font></div><div><font face="Courier New">          (set-stx-dict-alist! stx-dict (cons (cons key new-val) alist))</font></div><div><font face="Courier New">          new-val)))</font></div><div><font face="Courier New">  )</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(define-syntax m</font></div><div><font face="Courier New">  (let ([stx-dict (make-stx-dict)])</font></div><div><font face="Courier New">    (lambda (stx)</font></div><div><font face="Courier New">      (define sym (stx-dict-ref! stx-dict (syntax-local-introduce stx) gensym))</font></div><div><font face="Courier New">      (with-syntax ([sym (datum->syntax stx sym)])</font></div><div><font face="Courier New">        (syntax 'sym)))))</font></div><div><font face="Courier New"><br></font></div><div><font face="Courier New">(module+ test</font></div><div><font face="Courier New">  (define-syntax chk</font></div><div><font face="Courier New">    (lambda (stx)</font></div><div><font face="Courier New">      (with-syntax ([expr #'(m)])</font></div><div><font face="Courier New">        #`(begin</font></div><div><font face="Courier New">            (check-not-equal? (m) (m))</font></div><div><font face="Courier New">            (check-equal? expr expr)</font></div><div><font face="Courier New">            (check-equal? #,(syntax-local-introduce #'expr) #,(syntax-local-introduce #'expr))</font></div><div><font face="Courier New">            (check-not-equal? expr #,(syntax-local-introduce #'expr))))))</font></div><div><font face="Courier New">  (chk)</font></div><div><font face="Courier New">  )</font></div></div><br><blockquote type="cite">

<div class="gmail_quote">On Aug 17, 2014 12:02 PM, "Alexander D. Knauth" <<a href="mailto:alexander@knauth.org">alexander@knauth.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div>But those only work on identifiers, right?</div><div><br></div><div>But would something like this work?</div><div><br></div><div>(define (lexical-context=? s1 s2)</div><div>  (bound-identifier=? (datum->syntax s1 ‘x) (datum->syntax s2 ‘x)))</div>
<div><br></div><div>Or would that miss something?  </div><div><br></div><div><br></div><br><div><div>On Aug 17, 2014, at 1:31 PM, Roman Klochkov <<a href="mailto:kalimehtar@mail.ru" target="_blank">kalimehtar@mail.ru</a>> wrote:</div>
<br><blockquote type="cite"><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
Maybe something of<br><br><a href="http://docs.racket-lang.org/reference/stxcmp.html?q=free-identifier" target="_blank">http://docs.racket-lang.org/reference/stxcmp.html</a><br><br>?<br><br><br>Sat, 16 Aug 2014 23:32:10 -0400 от "Alexander D. Knauth" <<a href="mailto:alexander@knauth.org" target="_blank">alexander@knauth.org</a>>:<br>
<blockquote style="border-left-width:1px;border-left-style:solid;border-left-color:rgb(8,87,166);margin:10px;padding:0px 0px 0px 10px">Is there any way to check whether two syntax objects have the same lexical information, syntax-e (recursively), source location, properties, and whatever else they have, even if they aren’t eq?<br>
<br>For the syntax-e and source-location this is straightforward, but if there’s no accessor for the lexical information then how do I check if the lexical information is the same if the syntax objects aren’t eq?<br><br>And for the properties, can you only check the properties with keys that are interned symbols?<span> </span><br>
<br><br><br>____________________<br>  Racket Users list:<br>  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br></blockquote><br><br>--<span> </span><br>
Roman Klochkov</div></blockquote></div><br></div><br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div>
</blockquote></div><br></body></html>