- From: Michael Kay <mike@saxonica.com>
- Date: Fri, 4 Dec 2020 22:31:58 +0000
- To: Dimitre Novatchev <dnovatchev@gmail.com>
- Cc: "Liam R. E. Quin" <liam@fromoldbooks.org>, public-xslt-40@w3.org
- Message-Id: <CAE7AC88-F95D-468F-B839-EFED740BAF65@saxonica.com>
I haven't been proposing a change to the data model for functions; the definition of the arity of a function doesn't need to change, and I haven't been proposing that the parameters of a function become optional. In fact I haven't been proposing any change to the way functions or their parameters are declared. Instead I've been proposing a change to the syntax of a function call, so that arguments can be supplied with keywords, and arguments that are supplied in that way contribute map entries to a map which is supplied as the value for the final parameter in the function's declaration. We introduced map-valued option parameters as a design convention for a number of new functions in 3.0/3.1, and it has proved a useful mechanism that's worth exploiting more widely, but the syntax for supplying values for these parameters is certainly capable of improvement. To take an example, a call on fn:transform currently looks like this (XSLT 3.0 test case transform-006): <xsl:copy-of select="transform( map { 'package-name': 'http://transform-006a/', 'package-version' : '1.*', 'initial-template' : QName('', 'main'), 'delivery-format' : 'raw'})?output"/> and it would now be possible to call it like this: <xsl:copy-of select="transform( package-name: 'http://transform-006a/', package-version : '1.*', initial-template: QName('', 'main'), delivery-format : 'raw')?output"/> There's no change to the fn:transform function itself, it still has the same declaration, the same signature, the same arity; all that we're doing is providing a nicer syntax for calling it. Many other modern programming languages provide a similar capability; in Python, it's pretty-well identical to this. Michael Kay Saxonica > On 4 Dec 2020, at 20:17, Dimitre Novatchev <dnovatchev@gmail.com> wrote: > > Also, the definition of "arity" needs to be changed in all places where it is presented, for example in XDM: > https://www.w3.org/TR/xpath-datamodel-31/#dt-signature <https://www.w3.org/TR/xpath-datamodel-31/#dt-signature> > from: > > " [Definition <>: A function's arity is the number of its parameters. ] The number of names in a function's parameter names, and the number of parameter types in its signature, must equal the function's arity." > > to: > > [Definition <>: A function's arity is the number of its non-optional parameters. ] The number of names in a function's required-parameter names, and the number of parameter types in its signature, must equal the function's arity. > > Of course, function subtyping for functions that have optional parameter becomes a mess (Hope not to have such nightmares :) ) > > Thanks, > Dimitre > > On Fri, Dec 4, 2020 at 12:01 PM Liam R. E. Quin <liam@fromoldbooks.org <mailto:liam@fromoldbooks.org>> wrote: > On Fri, 2020-12-04 at 18:14 +0000, Michael Kay wrote: > > I think the bar for new syntax should be much higher than the bar for > > new functions. Although there might be concerns about "using up" the > > available space of function names, the space available for functions > > is vastly greater than the space available for new operators, and we > > shouldn't use it where a (higher order) function can do the job. > > Overall i agree, and especially about discoverability. But you are in > effect proposing new syntax with named arguments. > > -- > Liam Quin, https://www.delightfulcomputing.com/ <https://www.delightfulcomputing.com/> > Available for XML/Document/Information Architecture/XSLT/ > XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. > Barefoot Web-slave, antique illustrations: http://www.fromoldbooks.org <http://www.fromoldbooks.org/> > > >
Received on Friday, 4 December 2020 22:32:15 UTC