- From: Michael Dyck <jmdyck@ibiblio.org>
- Date: Tue, 9 Feb 2016 22:09:41 -0500
- To: public-xsl-query@w3.org
On 16-02-09 08:11 PM, Abel Braaksma wrote:
>
> (: in a function :)
> let $p := 10 return function($p, $q) { $p * $q }
>
> 2) In [this] example, the function body cannot access the variable $p
> (with value 10) because it is shadowed, as a result it has no effect on
> the body of the function,
Agreed.
> though technically it will be part of the non-local variable bindings
No, the Data Model says:
* nonlocal variable bindings (a mapping from xs:QName to item()*):
This provides a value for each of the function's free variables
(i.e., variables referenced by the function's implementation,
other than locals and parameters).
In the function's body, $p is not a free variable, so $p does not appear in
the function's nonlocal variable bindings.
> (: with pfa :)
> let $p := 10, $f := function($p, $q) { $p * $q } return $f(?, $p)
>
> 3) In [this] example, which is what I tried to get at w.r.t. to the
> current proposal for item 5.1.a., we have a non-local binding $p set to
> 10, $f is not part of the non-local bindings (recursive variables are not
> allowed), and the function creates a closure with local bindings ($p,
> $q), which are its arguments, and non-local bindings $p.
Again, $p is not a free variable in the function body, so it doesn't appear
in the anonymous function's nonlocal variable bindings.
> The expression returns a partially applied function with its second
> argument set to $p, which is 10.
Specifically, according to 5.a, it returns a function with the following
properties:
name: (absent)
parameter names: $p
signature: function (item()*)
implementation: the FunctionBody { $p * $q }
nlvb: [[ $q => 10 ]]
(The implementation is also 'associated with' the static and dynamic context
of the expression '$f(?, $p)', though they don't affect its behaviour.)
> This does *not* shadow the local variable binding $p even
> though it carries the same identifier. Let's call the result of this
> expression $PFA. Then $PFA(22) will return 210,
220, I think you mean.
> not 100. The latter could happen if the current text remained in place
> and was taken too literally.
I don't think so. Do you still think so?
-Michael
Received on Wednesday, 10 February 2016 03:10:53 UTC