[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] XPath 3.0 How to implement the function composition operator?


Subject: Re: [xsl] XPath 3.0 How to implement the function composition operator?
From: Dimitre Novatchev <dnovatchev@xxxxxxxxx>
Date: Tue, 16 Oct 2012 07:45:09 -0700

Great,
So we should keep up wththe latet version.

Cheers,
Dimitre

On Tue, Oct 16, 2012 at 12:43 AM, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>
> See the list of changes for Saxon 9.4 at
>
> http://www.saxonica.com/documentation9.4-demo/index.html#!changes/xp30-94
>
> <quote>
> The XQuery/XPath 3.0 parser has been extended to support partial function
> application ("?" as a function argument) in dynamic function calls.
> Previously this feature was supported only in direct function calls to a
> named function.
> </quote>
>
> Michael Kay
> Saxonica
>
>
>
> On 16/10/2012 01:56, Dimitre Novatchev wrote:
>>
>> I thought that using the argument placeholder "?" could be used to
>> specify a more readable implementation.
>>
>> However it seems tht Saxon EE 9.3.05 (coming with oXygen) doesn't
>> support argument place holders.
>>
>> For this query:
>>
>>           let $f := function($m as xs:integer, $n as xs:integer) as
>> xs:integer
>>                           {$m + $n}
>>             return
>>                 $f(5, ?)(3)
>>
>> an error message is raised:
>>
>> Unexpected token "?" in path expression
>> Start location: 24:0
>> URL: http://www.w3.org/TR/xpath20/#ERRXPST0003
>>
>> Could someone, please, explain what is the issue with this expression?
>>
>>
>> Cheers,
>> Dimitre
>>
>>
>>
>> On Mon, Oct 15, 2012 at 4:02 PM, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>>>
>>> compose is a function that takes two functions as input and produces a
>>> third
>>> function as output, so it looks like this:
>>>
>>> $compose   :=  function($a as function(item()*) as item()*,
>>>
>>>                          $b as function(item()*) as item()*)
>>>                       as (function(item()*) as item()*)
>>> {  function($c as item()*) as item()* { $b($a($c)) } }
>>>
>>> (Or the other way around. I don't know which way Haskell does it.)
>>>
>>> Michael Kay
>>> Saxonica
>>>
>>>
>>>
>>> On 15/10/2012 23:08, Costello, Roger L. wrote:
>>>>
>>>> Hi Folks,
>>>>
>>>> How is function composition implemented in XPath 3.0?
>>>>
>>>> Example: Suppose I want to compose these two function:
>>>>
>>>>       1. increment: this function increases its argument by 1.
>>>>
>>>>       2. double: this function multiplies its argument by 2.
>>>>
>>>> In Haskell I can compose the two functions like so:
>>>>
>>>>       f = double . increment
>>>>
>>>> And then I can apply the composed functions to an argument:
>>>>
>>>>       f 2
>>>>
>>>> The result is 6.
>>>>
>>>> How is f implemented in XPath 3.0?
>>>>
>>>> Here is my attempt, which is not correct:
>>>>
>>>>               let $increment :=  function($x as xs:integer) {$x + 1},
>>>>                    $double        :=  function($y as xs:integer) {$y *
>>>> 2},
>>>>                    $compose   :=  function(
>>>>                                                                  $a as
>>>> function(item()*) as item()*,
>>>>                                                                  $b as
>>>> function(item()*) as item()*
>>>>                                                               )
>>>>                                                              as item()*
>>>>                                                  {$b($a)},
>>>>                   $f  :=  $compose($double, $increment)
>>>>               return $f(2)
>>>>
>>>> What is the correct way?
>>>>
>>>> /Roger
>



-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
To avoid situations in which you might make mistakes may be the
biggest mistake of all
------------------------------------
Quality means doing it right when no one is looking.
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play
-------------------------------------
Facts do not cease to exist because they are ignored.
-------------------------------------
Typing monkeys will write all Shakespeare's works in 200yrs.Will they
write all patents, too? :)
-------------------------------------
I finally figured out the only reason to be alive is to enjoy it.


Current Thread
Keywords