|
Subject: Re: [xsl] XPath 3.0 How to implement the function composition operator? From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Mon, 15 Oct 2012 20:17:02 -0700 |
Roger and Michael,
Here is the definition of the compose() function I was after --
working with BaseX:
let $apply := function($f as function( item()*) as item()*,
$x as item()*
) as item()*
{$f($x)},
$_comp := function($f as function( item()*) as item()*,
$g as function( item()*) as item()*,
$z as item()*
)
as item()*
{
$apply($f, $apply($g, $z))
},
$comp := function($f as function( item()*) as item()*,
$g as function( item()*) as item()*
)
as function( item()*) as item()*
{
$_comp($f, $g, ?)
},
$double := function($m as item()) as item()
{ $m *2 },
$incr := function($x as item()) as item()
{ $x + 1}
return
$comp($double, $incr) (30)
This produces thecorrect, expected result:
62
On Mon, Oct 15, 2012 at 5:56 PM, Dimitre Novatchev <dnovatchev@xxxxxxxxx> 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.
--
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, Dimitre Novatchev | Thread | Re: [xsl] XPath 3.0 How to implemen, Michael Kay |
| Re: [xsl] XPath 3.0 How to implemen, Dimitre Novatchev | Date | Re: [xsl] XPath 3.0 How to implemen, Michael Kay |
| Month |