MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Return Ambiguity

  • To: mathgroup at
  • Subject: [mg97512] Re: Return Ambiguity
  • From: Raffy <raffy at>
  • Date: Sat, 14 Mar 2009 05:42:32 -0500 (EST)
  • References: <gpaotd$qeb$> <gpdacm$jrb$>

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-
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.

  • Prev by Date: Re: opening notebooks in mathematica player instead of
  • Next by Date: Re: read real*8 binary
  • Previous by thread: Re: Return Ambiguity
  • Next by thread: Re: Return Ambiguity