[racket] Test to disambiguate x-expression attributes vs. content?

From: Carl Eastlund (cce at ccs.neu.edu)
Date: Tue Jun 11 13:17:01 EDT 2013

Makes it easier to use existing facilities on them, like quote, quasiquote,
map, etc.

Carl Eastlund

On Tue, Jun 11, 2013 at 1:08 PM, Matthew Butterick
<mb.list.acct at gmail.com>wrote:

> To ask an abstract question: is there a particular reason that
> X-expressions are defined in Racket as a special kind of S-expression,
> rather than a struct or primitive datatype?
>
>
> On Tue, Jun 11, 2013 at 6:46 AM, Matthias Felleisen <matthias at ccs.neu.edu>wrote:
>
>>
>> You may have been speaking abstractly but the point is that it is a
>> mostly accurate summary of Xexpr and I use just this form in HtDP/2e to
>> process X-expressions. -- Matthias
>>
>>
>>
>> On Jun 10, 2013, at 3:27 PM, Jay McCarthy wrote:
>>
>> > I wasn't referencing the docs. I'm just talking abstractly. The point
>> > is that you have to consider the attribute list as a totally different
>> > kind of thing. The thing you cite can be directly turned into a match
>> > pattern, though:
>> >
>> > (match xe
>> > [(? string? s) ....]
>> > [(list (? symbol? tag) (list (list (? symbol? k) (? string? v)) ...) xe
>> ...)
>> >  ....]
>> > [(cons (? symbol? tag) (list xe ...))
>> >  ...]
>> > etc
>> >
>> > On Mon, Jun 10, 2013 at 1:20 PM, Matthew Butterick
>> > <mb.list.acct at gmail.com> wrote:
>> >> Aha, the xexpr-drop-empty-attributes is probably best, since it will
>> produce
>> >> consistent forms. Thanks.
>> >>
>> >> BTW what part of the docs are you citing for (list* Symbol (option
>> >> AttributeList) XexprList)? The only definition of X-expressions I'm
>> aware of
>> >> is here.
>> >>
>> >>
>> >> On Mon, Jun 10, 2013 at 11:58 AM, Jay McCarthy <jay.mccarthy at gmail.com
>> >
>> >> wrote:
>> >>>
>> >>> The type of Xexpr is...
>> >>> | AtomicContent
>> >>> | (list* Symbol (option AttributeList) XexprList)
>> >>>
>> >>> It sounds like you have one function F that you would like to give the
>> >>> type "Xexpr -> Value", but you are having a problem when you apply it
>> >>> to the AttributeList. You should have such a problem, because an
>> >>> AttributeList is not an Xexpr, so your types are wrong.
>> >>>
>> >>> In other words, if you want to recursively process an Xexpr, then you
>> >>> need two functions, one for attribute lists and one for xexpr lists.
>> >>>
>> >>> Finally, I find it convenient when automatically processing Xexprs to
>> >>> ensure that xexpr-drop-empty-attributes is #f so that there is always
>> >>> an attribute list and do:
>> >>>
>> >>> (match xe
>> >>> [(list* tag attrs content) ....])
>> >>>
>> >>>
>> >>>
>> >>> On Mon, Jun 10, 2013 at 12:40 PM, Matthew Butterick
>> >>> <mb.list.acct at gmail.com> wrote:
>> >>>> Consider an x-expression that represents an XML tag, so it has the
>> >>>> general
>> >>>> form
>> >>>>
>> >>>> '(tag ((attr-name "attr-value") ... ) content ...)
>> >>>>
>> >>>> The attributes or content might be omitted, of course.
>> >>>>
>> >>>> When I recursively process these expressions, I start by decomposing
>> the
>> >>>> x-expression into components:
>> >>>>
>> >>>> tag
>> >>>> ((attr-name "attr-value") ... )
>> >>>> (content ...)
>> >>>>
>> >>>> The problem that surfaces in a recursive-processing context is that
>> the
>> >>>> list
>> >>>> of content might have the same form as an attribute expression, e.g.,
>> >>>>
>> >>>> ((field-1 "value-1") (field-2 "value-2"))
>> >>>> ((p "some text") (p "some more text"))
>> >>>>
>> >>>> Is there a test I could use to reliably disambiguate between these
>> two
>> >>>> cases, short of creating a new struct for x-expressions? Seems like
>> I'm
>> >>>> overlooking some middle ground.
>> >>>>
>> >>>>
>> >>>>
>> >>>> ____________________
>> >>>>  Racket Users list:
>> >>>>  http://lists.racket-lang.org/users
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Jay McCarthy <jay at cs.byu.edu>
>> >>> Assistant Professor / Brigham Young University
>> >>> http://faculty.cs.byu.edu/~jay
>> >>>
>> >>> "The glory of God is Intelligence" - D&C 93
>> >>
>> >>
>> >>
>> >> ____________________
>> >>  Racket Users list:
>> >>  http://lists.racket-lang.org/users
>> >>
>> >
>> >
>> >
>> > --
>> > Jay McCarthy <jay at cs.byu.edu>
>> > Assistant Professor / Brigham Young University
>> > http://faculty.cs.byu.edu/~jay
>> >
>> > "The glory of God is Intelligence" - D&C 93
>> > ____________________
>> >  Racket Users list:
>> >  http://lists.racket-lang.org/users
>>
>>
>
> ____________________
>   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/20130611/0ca60c4a/attachment-0001.html>

Posted on the users mailing list.