-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi,
I'm working on a doubly-linked list (dlist) implementation and have been able to succesfully implement the prop:sequence #:property, allowing the use of my data structure as a sequence, allowing for example to convert to an ordinary list with `for/list'. I'm trying to now do the converse, that is implement my own `for/dlist' for constructing dlists from sequences, but I am having some trouble with the docs. Specifically, in the reference there is "2.18.2 Deriving New Iteration Forms"[1], which mentions `for/fold/derived' and `define-sequence-syntax', but doesn't really explain what they are for or how they should be used. The last time I thought I understood how to proceed I tried to do: (define (for/dlist (for/fold/derived for/dlist after fruitlessly trying to complete: (define-sequence-syntax for/dlist ... (for/fold/derived for/dlist but clearly I have no clue how this is supposed to work and I am currently not even sure that these constructs are there for supporting what I want to do. Some help would be highly appreciated. Some of the things that 2.18.2 does say, are worded rather poorly in my opinion, so for my part I will present some rewordings that I hope are more direct and clearer: Old paragraphs: Defines id as syntax. An (id . rest) form is treated specially when used to generate a sequence in a clause of for (or one of its variants). In that case, the procedure result of clause-transform-expr is called to transform the clause. When id is used in any other expression position, the result of expr-transform-expr is used. If it is a procedure of zero arguments, then the result must be an identifier other-id, and any use of id is converted to a use of other-id. Otherwise,expr-transform-expr must produce a procedure (of one argument) that is used as a macro transformer. Proposed replacement paragraphs: Defines id as syntax that is treated specially when used in/as [whichever is correct] a clause of an iteration (for, for/list, ...). In this special case, clause-transform-expr should evaluate to a syntax transformer (a procedure that takes a single syntax object argument and returns another) which is then called in the place of id except when it would return #f. When id is not used in a clause of an iteration, expr-transform-expr should either evaluate to a syntax transformer which is called in the place of id, or a thunk which returns an identifier other-id, which is used to convert each use of id to other-id. My understanding of the rest of that subsection is yet too low to attempt a rewrite. Marijn [1]:http://docs.racket-lang.org/reference/for.html?q=for/hash#(part._.Deriving_.New_.Iteration_.Forms) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk3mM08ACgkQp/VmCx0OL2xeEgCgxxhcuxs5YwvKEGnekESb7y9k 5t8An1743I1PHw1lxfpPc36kV4p+xl3k =xsSP -----END PGP SIGNATURE----- _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users