- From: <bugzilla@wiggum.w3.org>
- Date: Fri, 05 Feb 2010 23:20:13 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=8662 --- Comment #8 from John Snelson <john.snelson@oracle.com> 2010-02-05 23:20:12 --- (In reply to comment #7) > There are some uncertainties in the syntax. For one thing, the suggested syntax > looks like a variable binding, complete with $ - but then functions are called > without using $, as if they were true local functions and not variables: > > local $even := ... > ... > even(abs($a) - 1) That's an unfortunate typo - thanks for spotting it. Of course, the functions should be called using the variables ($even in the quoted example). > Also, the syntax itself is, IMO, too generic-looking while being specialized. > In particular, keyword "local", on one hand, does not in any way indicate the > main difference from "let" (scope of bound identifiers), and on the other hand, > looks like a general-purpose local variable declaration, even though it cannot > actually be used as such. I thought that "local" was more descriptive then "letrec", but maybe I've been looking at the syntax for too long. > One idea would be to allow "letrec" (given that XQuery syntax is traditionally > verbose, "let recursive" looks more in-line with the existing language) as > described in point #3, but restrict initializer to inline function on grammar > level. Such a restriction would fully enable this particular use case, and also > allow for further extensions, if they are deemed desirable (e.g. mutually > recursive lazy sequences a la Haskell, etc). It is also rather > self-descriptive. So: > > let recursive > $even := function($a) > { > if($a == 0) then true() > else $odd(abs($a) - 1) > }, > $odd := function($a) > { > if($a == 0) then false() > else $even(abs($a) - 1) > } > return ($even, $odd) > > is fine, but neither: > > let recursive $x := $y, $y := $x > > nor > > let recursive $x := 1, $y := 2 > > is not, because the expression must be an inline function. The proposal already restricts the variable binding expressions to be inline functions. I think that "let recursive" is a reasonable alternative syntax that should be considered. -- Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug.
Received on Friday, 5 February 2010 23:20:14 UTC