You don't really need them, they're just syntactical sugar making the code more readable for everybody familiar with functional programming.
- `head($sequence)` could be written as `$sequence[1]`
- `tail($sequence)` could be written as `$sequence[position()>1]`
--
Jens Erat
[phone]: tel:+49-151-56961126
[mail]: mailto:email@jenserat.de
[jabber]: xmpp:jabber@jenserat.de
[web]:
http://www.jenserat.de
PGP: 350E D9B6 9ADC 2DED F5F2 8549 CBC2 613C D745 722B
Am 20.05.2013 um 16:31 schrieb Marco Lettere
marco.lettere@dedalus.eu:
> Thanks a lot.
> I'm really wondering how I was able to overlook "head" and "tail" .... maybe the age .... :-(
>
> M.
>
> On 05/20/2013 03:44 PM, Jens Erat wrote:
>> hi Marco,
>>
>> using recursion is easily possible (and the only way to solve that problem without using maps), just write a small XQuery function like
>>
>> declare function local:interprete($operations as item()*, $set as item()*) as item()* {
>> let $op := head($operations)
>> let $ops := tail($operations)
>> let $intermediate :=
>> switch($op/@operator)
>> case "UNION" return ($set, $op/item[not(@name = $set/@name)])
>> case "INTERSECT" return $set[@name = $op/item/@name]
>> case "DIFFERENCE" return $set[not(@name = $op/item/@name)]
>> default return error()
>> return
>> if ($ops)
>> then
>> local:interprete($ops, $intermediate)
>> else $intermediate
>> };
>>
>> Which you would call using `local:interpret(//set, ())`. I guess the code should be small enough to be self-explaining. I seems to work, but I didn't test with much more than the input you provided, better do some additional tests on production data before using it.
>>
>> If you want to compare whole nodes instead of their name attribute, use `fn:deep-equal()` instead of the name comparisons. You will have to use some explicit loop, [quantified expressions] should get handy for that.
>>
>> Regards from Lake Constance, Germany,
>> Jens Erat
>>
>> [quantified expressions]:
http://www.w3.org/TR/xpath20/#id-quantified-expressions
>>
>
> _______________________________________________
> BaseX-Talk mailing list
> BaseX-Talk@mailman.uni-konstanz.de
>
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk