|
Subject: Re: [xsl] XPath 3.0 How to implement the function composition operator? From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Mon, 15 Oct 2012 17:56:53 -0700 |
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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] XPath 3.0 How to implemen, Michael Kay | Thread | Re: [xsl] XPath 3.0 How to implemen, Dimitre Novatchev |
| Re: [xsl] XPath 3.0 How to implemen, Michael Kay | Date | Re: [xsl] XPath 3.0 How to implemen, Dimitre Novatchev |
| Month |