request/suggestion

Wednesday, 1 February 2017 · 5 messages · last reply 4 Feb 2017
RS
Rob Stapper1 Feb 2017 13:21 #

Hi Christian,

For my recursive sequencer ( as I call it) I would like to have something like a 'hof:self()'-function.

This "hof:self()"-function would return the (declared) function where it is used in.

I have several functions that call another function with itself as one of the parameters:

For instance:

Declare function A( $p1) { X( $p1, ., A#1) } ;

Declare function B( $p1, $p2) { X( $p1, ., B#2) } ;

It would be nice if there was something like a "hof:self()"-function so that I could make these functions more generic.

For instance:

Declare function A( $p1) { X( $p1, ., hof:self()) } ;

Declare function B( $p1) { X( $p1, ., hof:self()) } ;

Is it something that would enrich the hof-module ?

Like to hear from you.

Rob Stapper

CG
Christian Grün1 Feb 2017 20:02 #

Hi Rob,

I must admit I didn’t fully understand your first example:

Quoted text · Rob Stapper · 1 line
> Declare function A( $p1) { X( $p1, …, A#1) } ;

What is X ? Do you have a (minimized) query available that runs out of the box, and show us the requested rewriting?

Christian

Quoted text · Rob Stapper · 48 lines
On Wed, Feb 1, 2017 at 1:21 PM, Rob Stapper <r.stapper at lijbrandt.nl> wrote: > Hi Christian, > > > > For my recursive sequencer ( as I call it) I would like to have something > like a ‘hof:self()’-function. > > This “hof:self()”-function would return the (declared) function where it is > used in. > > > > I have several functions that call another function with itself as one of > the parameters: > > For instance: > > > > Declare function A( $p1) { X( $p1, …, A#1) } ; > > Declare function B( $p1, $p2) { X( $p1, …, B#2) } ; > > > > It would be nice if there was something like a “hof:self()”-function so that > I could make these functions more generic. > > For instance: > > > > Declare function A( $p1) { X( $p1, …, hof:self()) } ; > > Declare function B( $p1) { X( $p1, …, hof:self()) } ; > > > > Is it something that would enrich the hof-module ? > > > > Like to hear from you. > > > > Rob Stapper
RS
Rob Stapper2 Feb 2017 20:44 #

Christian,

If I add:

Declare function X( $p1, ...., $f) { let $var := ........ return $f( $var)} ;

Does that clear things up? I will try to make some example in the weekend.

Rob

-----Oorspronkelijk bericht-----

Quoted text · Christian Grün · 58 lines
Van: Christian Grün [mailto:christian.gruen at gmail.com] Verzonden: woensdag 1 februari 2017 20:02 Aan: Rob Stapper CC: BaseX Onderwerp: Re: [basex-talk] request/suggestion Hi Rob, I must admit I didn’t fully understand your first example: > Declare function A( $p1) { X( $p1, …, A#1) } ; What is X ? Do you have a (minimized) query available that runs out of the box, and show us the requested rewriting? Christian On Wed, Feb 1, 2017 at 1:21 PM, Rob Stapper <r.stapper at lijbrandt.nl> wrote: > Hi Christian, > > > > For my recursive sequencer ( as I call it) I would like to have > something like a ‘hof:self()’-function. > > This “hof:self()”-function would return the (declared) function where > it is used in. > > > > I have several functions that call another function with itself as one > of the parameters: > > For instance: > > > > Declare function A( $p1) { X( $p1, …, A#1) } ; > > Declare function B( $p1, $p2) { X( $p1, …, B#2) } ; > > > > It would be nice if there was something like a “hof:self()”-function > so that I could make these functions more generic. > > For instance: > > > > Declare function A( $p1) { X( $p1, …, hof:self()) } ; > > Declare function B( $p1) { X( $p1, …, hof:self()) } ; > > > > Is it something that would enrich the hof-module ? > > > > Like to hear from you. > > > > Rob Stapper
RS
Rob Stapperin reply to Christian Grün, 1 Feb 2017, 20:024 Feb 2017 09:07 #

Hi Christian,

Hereby a short out of the box example. Actually it is about the commented example which shows how this hof:self() function could be used but that does not run off course.

Rob

-----Oorspronkelijk bericht-----

Quoted text · Christian Grün · 58 lines
Van: Christian Grün [mailto:christian.gruen at gmail.com] Verzonden: woensdag 1 februari 2017 20:02 Aan: Rob Stapper CC: BaseX Onderwerp: Re: [basex-talk] request/suggestion Hi Rob, I must admit I didn’t fully understand your first example: > Declare function A( $p1) { X( $p1, …, A#1) } ; What is X ? Do you have a (minimized) query available that runs out of the box, and show us the requested rewriting? Christian On Wed, Feb 1, 2017 at 1:21 PM, Rob Stapper <r.stapper at lijbrandt.nl> wrote: > Hi Christian, > > > > For my recursive sequencer ( as I call it) I would like to have > something like a ‘hof:self()’-function. > > This “hof:self()”-function would return the (declared) function where > it is used in. > > > > I have several functions that call another function with itself as one > of the parameters: > > For instance: > > > > Declare function A( $p1) { X( $p1, …, A#1) } ; > > Declare function B( $p1, $p2) { X( $p1, …, B#2) } ; > > > > It would be nice if there was something like a “hof:self()”-function > so that I could make these functions more generic. > > For instance: > > > > Declare function A( $p1) { X( $p1, …, hof:self()) } ; > > Declare function B( $p1) { X( $p1, …, hof:self()) } ; > > > > Is it something that would enrich the hof-module ? > > > > Like to hear from you. > > > > Rob Stapper
CG
Christian Grün4 Feb 2017 10:33 #

Hi Rob,

Thanks for the example. So you would like to have a function that returns a function item, which references the function in which it is currently evaluated?

* Original version:

  declare function local:f($v) {
    if($v > 0) then local:f($v - 1) else "OK"
  };
  local:f(3)

* Version with hof:self():

  declare function local:f($v) {
    if($v > 0) then $v + hof:self($v - 1)($v)
  };
  local:f(3)

I haven’t thought about all the implications yet, but I believe that the addition of such a function would restrict the way how we code can be optimized. Take this query for example:

  declare function local:add($x, $y) { $x + $y };
  local:add(1, 2)

The query optimizer will inline the called function and simplify the expression to

1 + 2

In the following query…

  declare function local:add() { hof:self() };
  local:add()

…we would need to suppress query inlining because it would otherwise yield different results.

Cheers, Christian


⚡Generated with XQuery