- From: <bugzilla@jessica.w3.org>
- Date: Mon, 26 Sep 2016 06:31:13 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=29869
Bug ID: 29869
Summary: Concise syntax for inline functions
Product: XPath / XQuery / XSLT
Version: Candidate Recommendation
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P2
Component: Requirements for Future Versions
Assignee: jim.melton@acm.org
Reporter: mike@saxonica.com
QA Contact: public-qt-comments@w3.org
Target Milestone: ---
Inline functions in XQuery are verbose. Consider
fn:sort($employees, function($emp as element(employee)) { $emp/@salary })
Programming in a purely function style becomes a lot easier with a compact
syntax for writing inline functions. Compare:
XQuery (1)
function($x as xs:integer, $y as xs:integer) { $x + $y }
XQuery (2)
function($x, $y) {$x + $y}
Javascript 6
(x, y) => x+y
Java 8
(int x, int y) -> x+y
Scala (1)
(x: Int, y: Int) => x + y
Scala (2)
_ + _
Haskell
\ x y -> x + y
Python
lambda x, y: x + y
A couple of suggestions:
(a) Many use cases for simple inline functions take a single item as argument,
and we could exploit the existing use of "." for the context item for such
cases. For example use
\{. + 1} as shorthand for
function($x as item()){$x/(. + 1)}
allowing constructs such as
fn:sort($employees, \{@salary})
(b) For functions without declared types, we could implicitly declare the
arguments as $1, $2, etc:
\{$1 + $2}
allowing
fn:sort($employees, \{$1/@salary})
Or we could combine the two ideas with "." being a synonym for ($1 treat as
item()), thus
fn:sort($employees, \{@salary})
I'm not wedded to the backslash. Alternatives to \{$1+2} would be fn{$1+$2} or
{|$1+$2|} or even bare {$1+$2}.
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Monday, 26 September 2016 06:31:58 UTC