[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message]

How much laziness is permitted?

John Snelson john.snelson at oracle.com
Wed Mar 11 11:00:04 PST 2009


  How much laziness is permitted?
Hi Pavel,

Pavel Minaev wrote:
>   (* module 1 *)
>   declare function m1:gen() {
>       for $x in 1 to 10000 return if ($x lt 10000) then $x else error()
>   }
> 
>   (* module 2 *)
>   declare function m2:trygen() {
>     try { m1:gen() } catch * { () }
>   };
> 
>   (* query *)
>   m2:trygen()[1],
> 
>   let $xs := m2:trygen()
>   for $x in $xs return $x * $x
> 
> 
> Now if the full laziness is still allowed, a legitimate implementation
> can either return 1 when lazy, or () when not. However, I can't wrap
> my head about the second expression. If gen() is implemented lazily
> and returns a generator, then the error will only be triggered on the
> next line while running it. On the other hand, the spec seems to
> require that the error should be caught by the catch block in
> trygen(), since syntactically it appears in gen() when called by
> trygen(). But how can trygen() do this without either doing eager
> evaluation, or relying on some form of re-invokable continuations (to
> backtrack to the proper point of error on exception, and return the
> correct result?

As it turns out, try/catch is actually a blocking operation on lazy 
evaluation. If a lazily evaluated expression inside a try/catch block 
returns (1, 2, 3) but then raises an error, the implementation 
effectively needs to "recall" the values (1, 2, 3) and instead return 
the value of the catch expression. Since most lazy implementations won't 
have the ability to "recall" values already returned, this means they 
can't return any values until expression evaluation has terminated - in 
other words, they need to evaluate eagerly.

John

-- 
John Snelson, Oracle Corporation            http://snelson.org.uk/john
Berkeley DB XML:            http://oracle.com/database/berkeley-db/xml
XQilla:                                  http://xqilla.sourceforge.net


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.