Hi Ghislain, Alright, I forgot about fn:replace#4, but the implicit binding is sometimes hard to detect.
Thanks. 2017-08-02 12:04 GMT+02:00 Ghislain Fourny <gfou...@inf.ethz.ch>: > ... 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 <gfou...@inf.ethz.ch> 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 <wsha...@gmail.com> 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" <m...@saxonica.com>: > >> 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 <wsha...@gmail.com> 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 > >>> _______________________________________________ > >>> talk@x-query.com > >>> http://x-query.com/mailman/listinfo/talk > >> > >> > >> _______________________________________________ > >> talk@x-query.com > >> http://x-query.com/mailman/listinfo/talk > > > >
_______________________________________________ talk@x-query.com http://x-query.com/mailman/listinfo/talk