... I didn't get it quite right actually. In @address => string(), there is no context item involved, I wrote too fast. :-)
New attempt: @address ! string(.) (: explicitly passed context item :) @address ! string() (: context item passed implicitly to string#0, which is context-dependent) @address => string() (: @address passed implicitly to string#1 as the first parameter via the => operator, but string#1 is context-independent) @address => string(.) (: error: string#2 does not exist :) Kind regards, Ghislain > On 2 Aug 2017, at 12:00, Ghislain Fourny <[email protected]> wrote: > > Dear Wouter, > > There is one more important difference on the syntactic level. > > With the arrow operator, the left-hand-side is implicitly bound to the first > parameter of the function. > > @address => replace(@postcode, "", "q") > > is the same as > > replace(@address, @postcode, "", "q") > > > With the simple map operator, the context item must be explicitly referred > to, like so: > > @address ! replace(., @postcode, "", "q") > > > What may create confusion is that some functions have several signatures, > some of which implicitly refer to the context item. But this is a very > different mechanism. > > For example : > > @address ! string(.) (: explicitly passed context item :) > @address ! string() (: context item passed implicitly to string#0, which is > context-dependent) > @address => string() (: context item passed implicitly to string#1 via the => > operator, but string#1 is context-independent) > > I hope I got it right! > > Kind regards, > Ghislain > > >> On 2 Aug 2017, at 11:27, W.S. Hager <[email protected]> wrote: >> >> Hi Michael, >> >> The way you used the arrow operator in the example would be the way I >> expected it to work, namely by explicitly addressing the context, but it >> seems that it doesn't. It's actually implicitly binding the first argument >> of the function on the right to the value on the left. Or is there an >> exception I don't know about? >> >> Thanks. >> >> Op 1 aug. 2017 18:58 schreef "Michael Kay" <[email protected]>: >> In the case of singletons there's very little difference, but (as I now see >> Christian has pointed out), with sequences the effect is quite different. >> >> Also, of course, "!" changes the context item, so >> >> @address => replace(@postcode, "", "q") works, while >> >> @address ! replace(@postcode, "", "q") doesn't. >> >> Michael Kay >> Saxonica >> >>> On 1 Aug 2017, at 13:27, W.S. Hager <[email protected]> wrote: >>> >>> Hi, >>> >>> Is there any advantage to using the 3.1 arrow operator over the simple map >>> operator? >>> >>> $string => upper-case() => normalize-unicode() => tokenize("\s+") >>> >>> versus >>> >>> $string ! upper-case(.) ! normalize-unicode(.) ! tokenize(.,"\s+") >>> >>> Thanks, >>> Wouter >>> _______________________________________________ >>> [email protected] >>> http://x-query.com/mailman/listinfo/talk >> >> >> _______________________________________________ >> [email protected] >> http://x-query.com/mailman/listinfo/talk > _______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
