> On 11 Mar 2019, at 17:22, John Snelson <[email protected]> wrote: > > Looks like a bug to me. The first argument of the partially applied > "map:for-each" <map:for-each> is the one marked with a "?".
Not sure what you mean by "bug" here, but I think it's doing what the spec says. A => B(x, ?)() means B(A, x, ?)() not B(x, ?)(A) Michael Kay Saxonica > > On 10/03/2019 23:45, Adam Retter wrote: >> Thanks Zach. I suspect you are right. However I can't help wishing that the >> argument placeholders should be resolved before the arrow operator is >> applied... >> >> For the average developer, the fact that my first query raises an error >> seems non intuitive, especally in light of the reformulation in my second >> query. >> >> On Mon, 11 Mar 2019, 13:37 Zachary N. Dean, <[email protected] >> <mailto:[email protected]>> wrote: >> Hello Adam, >> >> I think the issue is that the Arrow Operator '=>' is simply "syntactic >> sugar" for using the LHS as the FIRST argument of the function call on the >> RHS. >> The Argument Placeholder '?' has no direct relation to the Arrow Operator. >> >> So, in the case of the first example: >> >> function($k, $v) { >> "$k=" || $k >> } => >> map:for-each( <map:for-each(> >> map { >> "a" : "1", >> "b" : "2", >> "c" : "3" >> }, >> ? >> )() >> >> Simply becomes: >> >> map:for-each( <map:for-each(> >> function($k, $v) { >> "$k=" || $k >> }, >> map { >> "a" : "1", >> "b" : "2", >> "c" : "3" >> }, >> ? >> )() >> >> >> So, the 3 argument map:for-each <map:for-each> isn't found. (and the final >> call would have >> the wrong arity if it was found) >> >> >> Hope this helps, >> >> Zack >> >> -----Original Message----- >> From: [email protected] <mailto:[email protected]> >> <[email protected] <mailto:[email protected]>> On Behalf Of >> Adam >> Retter >> Sent: Montag, 11. März 2019 06:21 >> To: XQuery Talk ML <[email protected] <mailto:[email protected]>> >> Cc: [email protected] <mailto:[email protected]> >> Subject: [xquery-talk] Arrow Operator to a Partially Applied Function >> >> Without thinking too deeply, whilst writing some XQuery recently I was >> initially surprised to discover that the following (simplified) query fails >> with the static error - [XPST0017] map:for-each(map,function) >> <map:for-each(map,function)>: 3 arguments >> supplied, 2 expected. >> >> >> xquery version "3.1"; >> declare namespace map = "http://www.w3.org/2005/xpath-functions/map >> <http://www.w3.org/2005/xpath-functions/map>"; >> >> function($k, $v) { >> "$k=" || $k >> } => >> map:for-each( <map:for-each(> >> map { >> "a" : "1", >> "b" : "2", >> "c" : "3" >> }, >> ? >> )() >> >> >> After having looked into the specs in more detail, I thought I was able to >> derive a reason for this... i.e. the partial function application syntax is >> not processed until the dynamic evaluation phase. Therefore when the arrow >> operator is processed first during the static analysis phase, it tries to >> find a map:for-each <map:for-each> function that takes 3 parameters, the >> first being of the >> function type on LHS of the arrow operator, and second being the map, and >> the third being the unbound parameter `?`. >> >> However, I then noticed that if I reformulatedby query with an indirection >> through a variable binding `$x` then it compiles and executes just fine. >> Presumably this indicates that my understanding above is incorrect, as >> whilst the variable binding may change the evaluation order, the static >> analysis and dynamic evaluation phases should still happen in the same >> order. >> >> >> xquery version "3.1"; >> declare namespace map = "http://www.w3.org/2005/xpath-functions/map >> <http://www.w3.org/2005/xpath-functions/map>"; >> >> let $x := >> map:for-each( <map:for-each(> >> map { >> "a" : "1", >> "b" : "2", >> "c" : "3" >> }, >> ? >> ) >> return >> >> function($k, $v) { >> "$k=" || $k >> } => $x() >> >> >> I basically get the same results on eXist-db, Saxon, and BaseX. I would >> appreciate if someone could help me understand what I am seeing here... >> >> Thanks Adam. >> >> -- >> Adam Retter >> >> skype: adam.retter >> tweet: adamretter >> http://www.adamretter.org.uk <http://www.adamretter.org.uk/> >> _______________________________________________ >> [email protected] <mailto:[email protected]> >> http://x-query.com/mailman/listinfo/talk >> <http://x-query.com/mailman/listinfo/talk> >> >> --- >> This email has been checked for viruses by AVG. >> https://www.avg.com <https://www.avg.com/> >> >> >> >> _______________________________________________ >> [email protected] <mailto:[email protected]> >> http://x-query.com/mailman/listinfo/talk >> <http://x-query.com/mailman/listinfo/talk> > -- > John Snelson, Principal Engineer http://twitter.com/jpcs > <http://twitter.com/jpcs> > MarkLogic Corporation http://www.marklogic.com > <http://www.marklogic.com/>_______________________________________________ > [email protected] > http://x-query.com/mailman/listinfo/talk
_______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
