Re: [racket-users] sub-range-binders

2015-07-15 Thread Robby Findler
No, I don't think that this can be made to work with the current
sub-range-binders. The way DrRacket thinks about this is that those
are two different binders (symb and symb?), and you are renaming
either one of them or the other one. It can't connect them the way you
are seeming to want to connect them (if I'm understanding correctly?).

Robby


On Tue, Jul 14, 2015 at 11:50 AM, Jens Axel Søgaard
jensa...@soegaard.net wrote:
 Hi All,

 I am experimenting with the sub-range-binders syntax property.

 Given this program:

 (define symb? symbol?)
 (define-no? symb?)
 symb

 I want to use DrRacket's renaming facility to rename the symb? in the second
 line to sym?.

 I expect to get this program:

 (define sym? symbol?)
 (define-no? sym?)
 sym

 However I get this:

 (define sym? symbol?)
 (define-no? sym?)
 sym?

 (notice the extra ? in the last line).

 Is this possible using sub-range-binders ?

 /Jens Axel


 #lang racket/base
 (require (for-syntax racket/base))
 (define-syntax (define-no? stx)
   (syntax-case stx ()
 [(_ id?)
  (let ()
(define s (symbol-string (syntax-e #'id?)))
(define l1 (string-length s))
(define l2 (- l1 1))
(define id-str (substring s 0 l2))
(define id (datum-syntax #'id? (string-symbol id-str)))

(syntax-property #`(define #,id id?)
 'sub-range-binders (vector (syntax-local-introduce
 id)
0 l2 0.5 0.5
(syntax-local-introduce
 #'id?)
0 l1 0.5 0.5)))]))

 (define symb? symbol?)
 (define-no? symb?)
 symb


 --
 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 racket-users+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.

-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] sub-range-binders

2015-07-15 Thread Leif Andersen
So then, out of curiosity, how does it do this for structs? (I thought it
was using sub-range-binders there.)

For example:

If I have the program:

#lang racket
(struct foo (bar))
(define x (foo 2))
(foo-bar x)

I can use the rename tool to rename bar to baz and get:

#lang racket
(struct foo (bar))
(define x (foo 2))
(foo-bar x)




~Leif Andersen

On Wed, Jul 15, 2015 at 3:48 PM, Robby Findler ro...@eecs.northwestern.edu
wrote:

 No, I don't think that this can be made to work with the current
 sub-range-binders. The way DrRacket thinks about this is that those
 are two different binders (symb and symb?), and you are renaming
 either one of them or the other one. It can't connect them the way you
 are seeming to want to connect them (if I'm understanding correctly?).

 Robby


 On Tue, Jul 14, 2015 at 11:50 AM, Jens Axel Søgaard
 jensa...@soegaard.net wrote:
  Hi All,
 
  I am experimenting with the sub-range-binders syntax property.
 
  Given this program:
 
  (define symb? symbol?)
  (define-no? symb?)
  symb
 
  I want to use DrRacket's renaming facility to rename the symb? in the
 second
  line to sym?.
 
  I expect to get this program:
 
  (define sym? symbol?)
  (define-no? sym?)
  sym
 
  However I get this:
 
  (define sym? symbol?)
  (define-no? sym?)
  sym?
 
  (notice the extra ? in the last line).
 
  Is this possible using sub-range-binders ?
 
  /Jens Axel
 
 
  #lang racket/base
  (require (for-syntax racket/base))
  (define-syntax (define-no? stx)
(syntax-case stx ()
  [(_ id?)
   (let ()
 (define s (symbol-string (syntax-e #'id?)))
 (define l1 (string-length s))
 (define l2 (- l1 1))
 (define id-str (substring s 0 l2))
 (define id (datum-syntax #'id? (string-symbol id-str)))
 
 (syntax-property #`(define #,id id?)
  'sub-range-binders (vector
 (syntax-local-introduce
  id)
 0 l2 0.5 0.5
 
 (syntax-local-introduce
  #'id?)
 0 l1 0.5 0.5)))]))
 
  (define symb? symbol?)
  (define-no? symb?)
  symb
 
 
  --
  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 racket-users+unsubscr...@googlegroups.com.
  For more options, visit https://groups.google.com/d/optout.

 --
 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 racket-users+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.


-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] sub-range-binders

2015-07-15 Thread Robby Findler
Oh, I understand Jens Axel to be doing something more subtle than
that. In particular, in his example check syntax sees two distinct
identifiers (sym and sym?) that have overlapping ranges. When you
rename one, it just renames that one and hopes for the best. (Well, to
see what it actually does, you'll want to look at the code.) With
define-struct, the sub identifiers don't actually overlap, their
ranges are always disjoint.

I'm not opposed to changing its behavior for the overlapping case if
there is a more sensible thing to do. Hopefully suggestions wil be
made in the form of pull requests with test suites, tho :)

Robby



On Wed, Jul 15, 2015 at 3:03 PM, Leif Andersen l...@leifandersen.net wrote:
 So then, out of curiosity, how does it do this for structs? (I thought it
 was using sub-range-binders there.)

 For example:

 If I have the program:

 #lang racket
 (struct foo (bar))
 (define x (foo 2))
 (foo-bar x)

 I can use the rename tool to rename bar to baz and get:

 #lang racket
 (struct foo (bar))
 (define x (foo 2))
 (foo-bar x)




 ~Leif Andersen

 On Wed, Jul 15, 2015 at 3:48 PM, Robby Findler ro...@eecs.northwestern.edu
 wrote:

 No, I don't think that this can be made to work with the current
 sub-range-binders. The way DrRacket thinks about this is that those
 are two different binders (symb and symb?), and you are renaming
 either one of them or the other one. It can't connect them the way you
 are seeming to want to connect them (if I'm understanding correctly?).

 Robby


 On Tue, Jul 14, 2015 at 11:50 AM, Jens Axel Søgaard
 jensa...@soegaard.net wrote:
  Hi All,
 
  I am experimenting with the sub-range-binders syntax property.
 
  Given this program:
 
  (define symb? symbol?)
  (define-no? symb?)
  symb
 
  I want to use DrRacket's renaming facility to rename the symb? in the
  second
  line to sym?.
 
  I expect to get this program:
 
  (define sym? symbol?)
  (define-no? sym?)
  sym
 
  However I get this:
 
  (define sym? symbol?)
  (define-no? sym?)
  sym?
 
  (notice the extra ? in the last line).
 
  Is this possible using sub-range-binders ?
 
  /Jens Axel
 
 
  #lang racket/base
  (require (for-syntax racket/base))
  (define-syntax (define-no? stx)
(syntax-case stx ()
  [(_ id?)
   (let ()
 (define s (symbol-string (syntax-e #'id?)))
 (define l1 (string-length s))
 (define l2 (- l1 1))
 (define id-str (substring s 0 l2))
 (define id (datum-syntax #'id? (string-symbol id-str)))
 
 (syntax-property #`(define #,id id?)
  'sub-range-binders (vector
  (syntax-local-introduce
  id)
 0 l2 0.5 0.5
 
  (syntax-local-introduce
  #'id?)
 0 l1 0.5 0.5)))]))
 
  (define symb? symbol?)
  (define-no? symb?)
  symb
 
 
  --
  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 racket-users+unsubscr...@googlegroups.com.
  For more options, visit https://groups.google.com/d/optout.

 --
 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 racket-users+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/d/optout.



-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: [racket-users] sub-range-binders

2015-07-15 Thread Leif Andersen
Oh, okay, that makes complete sense. Thanks.


~Leif Andersen

On Wed, Jul 15, 2015 at 4:24 PM, Robby Findler ro...@eecs.northwestern.edu
wrote:

 Oh, I understand Jens Axel to be doing something more subtle than
 that. In particular, in his example check syntax sees two distinct
 identifiers (sym and sym?) that have overlapping ranges. When you
 rename one, it just renames that one and hopes for the best. (Well, to
 see what it actually does, you'll want to look at the code.) With
 define-struct, the sub identifiers don't actually overlap, their
 ranges are always disjoint.

 I'm not opposed to changing its behavior for the overlapping case if
 there is a more sensible thing to do. Hopefully suggestions wil be
 made in the form of pull requests with test suites, tho :)

 Robby



 On Wed, Jul 15, 2015 at 3:03 PM, Leif Andersen l...@leifandersen.net
 wrote:
  So then, out of curiosity, how does it do this for structs? (I thought it
  was using sub-range-binders there.)
 
  For example:
 
  If I have the program:
 
  #lang racket
  (struct foo (bar))
  (define x (foo 2))
  (foo-bar x)
 
  I can use the rename tool to rename bar to baz and get:
 
  #lang racket
  (struct foo (bar))
  (define x (foo 2))
  (foo-bar x)
 
 
 
 
  ~Leif Andersen
 
  On Wed, Jul 15, 2015 at 3:48 PM, Robby Findler 
 ro...@eecs.northwestern.edu
  wrote:
 
  No, I don't think that this can be made to work with the current
  sub-range-binders. The way DrRacket thinks about this is that those
  are two different binders (symb and symb?), and you are renaming
  either one of them or the other one. It can't connect them the way you
  are seeming to want to connect them (if I'm understanding correctly?).
 
  Robby
 
 
  On Tue, Jul 14, 2015 at 11:50 AM, Jens Axel Søgaard
  jensa...@soegaard.net wrote:
   Hi All,
  
   I am experimenting with the sub-range-binders syntax property.
  
   Given this program:
  
   (define symb? symbol?)
   (define-no? symb?)
   symb
  
   I want to use DrRacket's renaming facility to rename the symb? in the
   second
   line to sym?.
  
   I expect to get this program:
  
   (define sym? symbol?)
   (define-no? sym?)
   sym
  
   However I get this:
  
   (define sym? symbol?)
   (define-no? sym?)
   sym?
  
   (notice the extra ? in the last line).
  
   Is this possible using sub-range-binders ?
  
   /Jens Axel
  
  
   #lang racket/base
   (require (for-syntax racket/base))
   (define-syntax (define-no? stx)
 (syntax-case stx ()
   [(_ id?)
(let ()
  (define s (symbol-string (syntax-e #'id?)))
  (define l1 (string-length s))
  (define l2 (- l1 1))
  (define id-str (substring s 0 l2))
  (define id (datum-syntax #'id? (string-symbol id-str)))
  
  (syntax-property #`(define #,id id?)
   'sub-range-binders (vector
   (syntax-local-introduce
   id)
  0 l2 0.5 0.5
  
   (syntax-local-introduce
   #'id?)
  0 l1 0.5 0.5)))]))
  
   (define symb? symbol?)
   (define-no? symb?)
   symb
  
  
   --
   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 racket-users+unsubscr...@googlegroups.com.
   For more options, visit https://groups.google.com/d/optout.
 
  --
  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 racket-users+unsubscr...@googlegroups.com.
  For more options, visit https://groups.google.com/d/optout.
 
 


-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


[racket-users] sub-range-binders

2015-07-14 Thread Jens Axel Søgaard
Hi All,

I am experimenting with the sub-range-binders syntax property.

Given this program:

(define symb? symbol?)
(define-no? symb?)
symb

I want to use DrRacket's renaming facility to rename the symb? in the
second line to sym?.

I expect to get this program:

(define sym? symbol?)
(define-no? sym?)
sym

However I get this:

(define sym? symbol?)
(define-no? sym?)
sym?

(notice the extra ? in the last line).

Is this possible using sub-range-binders ?

/Jens Axel


#lang racket/base
(require (for-syntax racket/base))
(define-syntax (define-no? stx)
  (syntax-case stx ()
[(_ id?)
 (let ()
   (define s (symbol-string (syntax-e #'id?)))
   (define l1 (string-length s))
   (define l2 (- l1 1))
   (define id-str (substring s 0 l2))
   (define id (datum-syntax #'id? (string-symbol id-str)))

   (syntax-property #`(define #,id id?)
'sub-range-binders (vector (syntax-local-introduce
id)
   0 l2 0.5 0.5
   (syntax-local-introduce
#'id?)
   0 l1 0.5 0.5)))]))

(define symb? symbol?)
(define-no? symb?)
symb

-- 
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 racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.