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.a...@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 > <matth...@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.a...@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.mccar...@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.a...@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 <j...@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 <j...@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 > >
____________________ Racket Users list: http://lists.racket-lang.org/users