(1) To create cyclic structs you need mutability in our world. [gensym is 0 assignments, cyclic structs is 1 assignment, and state is N assignments.]
(2) I think the failure should come earlier when a struct isn't mutable. If you agree, you can try to request a feature change. On Jun 8, 2011, at 3:20 AM, Marijn wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Hi Matthias, > > On 06/06/11 16:58, Matthias Felleisen wrote: >> >> Do you want something like this: >> >> #lang racket >> >> (struct dl (left node right) #:transparent #:mutable) >> >> (shared ((middle (dl left 1 right)) >> (left (dl #false 0 middle)) >> (right (dl middle 2 #false))) >> middle) > > Ah, yes, thank you, that's what I was looking for. > > `shared' seems to depend critically on `dl' being mutable and fails > silently when it isn't. For example: > > > #lang racket > > ;;; link structure > (struct _dl (left val right) #:mutable > #:property prop:custom-write > (lambda (dl p write?) > (let ((print (if write? write display))) > (display #\() > (let loop ((dl dl)) > (print (_dl-val dl)) > (let ((right (_dl-right dl))) > (if right (begin (display " ")(loop right)) > (display #\)) ))))) ) > > (define (dlist a b c) > (shared ((middle (_dl left b right)) > (left (_dl #false a middle)) > (right (_dl middle c #false))) > middle) ) > > (dlist 1 2 3) > > (display (dlist 1 2 3)) > > > Outputs: > > > (2 3)(2 3)(2 3) > (2 3)(2 3) > > > but when #:mutable is removed it fails in display not in shared. Further > I do not understand why my custom display code is called so often. > Lastly, I wonder if there is a benefit to specific orderings of the > shared clauses or not? > > Thanks, > > Marijn > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v2.0.17 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ > > iEYEARECAAYFAk3vItEACgkQp/VmCx0OL2yIswCgtjXleU2h01ABPKy6AYLUd74y > sVAAoJFx6w4VxEtRiTiXL3NpymO6aDi1 > =K8Ck > -----END PGP SIGNATURE----- _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users