[sc34wg3] TMQL: function-invocation and parameters

Robert Barta rho at devc.at
Wed Feb 25 13:42:16 EST 2009


On Mon, Feb 23, 2009 at 08:48:27PM +0100, Lars Heuer wrote:
> >> I wonder why 'asc' / 'desc' should be allowed for function
> >> invocations and I have the suspicion that "parameters" references
> >> "tuple-expression" to save a grammar production.
> 

> In my opinion a function invocation is different and legitimates
> therefor a special rule. If I'd understand why making
> 
>    function null
> 
> equivalent to
> 
>    function()
> 
> is a Good Thing and why asc / desc should be allowed for functions
> (see below), I may change my opinion, though. ;)

The following is a summary of a discussion at the #topicmaps IRC
channel:

  http://wega.tm.informatik.uni-frankfurt.de/ueberall/misc/logs/archive/%23topicmaps20090224.html#2009-02-24T14:32:58+01:00

Yes, this is the place where the supermodels (Lars^2) hang out.

--

There are two issues:

The first is that the phrase

    my:fancyfunction ()

can be written as

    my:fancyfunction null

just because the empty sequence () can also be written as

    null

  [P] http://kill.devc.at/system/files/tmql-2008-07-15.html#tuple-expression

There are two possible reactions to this:

  A) "Who cares, so why not?"

  B) "Oh, this looks as if the universe explodes and the terrorists win."

If (B) is a common thinking, then we can simply remove [P] and move on. The
motivation to have something like null is to allow developers to write

  ...
  if .... then
     ... return null
  ...

--------------------

The other issue is more fundamental and has to do how functions are
dealt with in TMQL. One obvious use is

   for $p in // person
   return
       emp:age ($p / birthdate)

So first the birthdate(s) is computed and then injected into the function.
But the above can be rewritten into

   return
       emp:age (// person / birthdate)

as it does the same thing:

   - first compute all persons,
   - then all their birthdates
   - then for each of the birthdate convert that into an age

If you look closer (and forget for a second the Modula/Pascal/C/Java syntax
for functions, then you will see first the computation of a tuple sequence
of birthdates

   (// person / birthdate)

TMQL already has this concept, so why have another special syntax for
it? That a function is applied to the above tuple sequence is then
written as

   emp:age (// person / birthdate)
   ^^^^^^^
   function^^^^^^^^^^^^^^^^^^^^^^
              tuple - sequence

On Mon, Feb 23, 2009 at 08:48:27PM +0100, Lars Heuer wrote:

> I do not understand this. As you've mentioned, the "desc" belongs to
> the path expression "//person" and is evaluated before the
> tuple sequence is passed into the function.

Yes, any ordering is done to the tuple sequence BEFORE that is
injected into the function.

> Even if we'd define function-invocation as follows:
> 
>   function-invocation ::= item-reference '(' parameters? ')'
>   parameters ::= value-expression (',' value-expression)*
> 
> we'd get the same result, wouldn't we?

I do not think that is to the reordering issue. My argument is

  "why would I invent a new syntax rule for something I already have
   in the language?"

\rho


More information about the sc34wg3 mailing list