Re: Return Ambiguity
- To: mathgroup at smc.vnet.net
- Subject: [mg97512] Re: Return Ambiguity
- From: Raffy <raffy at mac.com>
- Date: Sat, 14 Mar 2009 05:42:32 -0500 (EST)
- References: <gpaotd$qeb$1@smc.vnet.net> <gpdacm$jrb$1@smc.vnet.net>
No ambiguity? :p
What do these return?
(Return[#]; 1) &[2]
Block[{}, Return[1]; 2]
If[True, Return[1]; 2]
(Do[Return[1], {1}]; 2)
(Block[{}, Return[1]]; 2)
Do[Return[Evaluate[Return[1]]], {1}]
f := (Module[{}, If[True, Return[1]]]; 2); f
1 /. {1 :> (Return[1]; 2)}
It seems like the documentation should say:
1. Properly exits to nearest Do[...]-instruction or SetDelayed-
evaluation.
2. Exits all other evaluations oddly by wrapping result in head
Return, including a pure function.
I feel that Catch/Throw introduces significant speed overhead.
A simple return shouldn't need to invoke pattern matching.
Usually, the use of Return can be avoided, however, often the
equivalent Return-less code usually has excessive indenting.
I'd say a proper replacement, would be a function that returns to
nearest scoping construct, ie. Block/Module/With.