Hello,
I was wondering if it is possible to improve template programming and operator overloading with XQUERY 3.?
1) template programming : XQUERY provides a quite natural template mechanism using type switch and instance:
declare function yell($animal) { if ($animal instance of element()) then
return typeswitch($animal) case element(cow) return "Moo" default return "..."
else "this is not an animal" };
However, I wonder whether it could be possible to provide such a mechanism directly at the interpreter level ? For instance, the following code seems coherent and concise :
declare function yell($animal as element(cow) ) {"Moo"} declare function yell($animal as element() ) {".."} declare function yell($animal ) {"This is not an animal"}
As far as I understand, XQUERY functions identification seems to be achieve through a couple (name, arity). Would it be difficult to extend it with (name,signature or predicate) ?
2) Operator overloading (quite linked to the previous question)
I don't know how to overload operators with XQUERY. For instance I would like to define something like
declare function array:operator+($left,$right){array:for -each-pair($left,$right,function($a + $b) { $a + $b } )}
Is it possible ?
I know that I can survive writing
declare function array:plus($left,$right){array:for-each-pair($left,$right, function($a + $b) { $a + $b } )}
but when one start to write algorithmic code, it is far easier and understandable to write $a+$b than array:plus($a,$b)
Hi Jean-Marc,
It may be worthwhile to discuss this general XQuery feature request on talk@x-query.com or the W3 bug tracker [1].
Best, Christian
[1] https://www.w3.org/Bugs/Public/
On Sun, Jan 4, 2015 at 11:05 AM, jean-marc Mercier jeanmarc.mercier@gmail.com wrote:
Hello,
I was wondering if it is possible to improve template programming and operator overloading with XQUERY 3.?
- template programming : XQUERY provides a quite natural template mechanism
using type switch and instance:
declare function yell($animal) { if ($animal instance of element()) then
return typeswitch($animal) case element(cow) return "Moo" default return "..."
else "this is not an animal" };
However, I wonder whether it could be possible to provide such a mechanism directly at the interpreter level ? For instance, the following code seems coherent and concise :
declare function yell($animal as element(cow) ) {"Moo"} declare function yell($animal as element() ) {".."} declare function yell($animal ) {"This is not an animal"}
As far as I understand, XQUERY functions identification seems to be achieve through a couple (name, arity). Would it be difficult to extend it with (name,signature or predicate) ?
- Operator overloading (quite linked to the previous question)
I don't know how to overload operators with XQUERY. For instance I would like to define something like
declare function array:operator+($left,$right){array:for-each-pair($left,$right,function($a + $b) { $a + $b } )}
Is it possible ?
I know that I can survive writing
declare function array:plus($left,$right){array:for-each-pair($left,$right,function($a + $b) { $a + $b } )}
but when one start to write algorithmic code, it is far easier and understandable to write $a+$b than array:plus($a,$b)
basex-talk@mailman.uni-konstanz.de