If someone wants to make all and any short circuiting I think that would be 
better behavior.


> On Feb 4, 2015, at 2:37 AM, Wai Yip Tung <[email protected]> wrote:
> 
> Thank you. The gist works well.
> 
> In situations when I have to use a for loop, is there a way to tell if the 
> for loop has  completed or not?
> 
> Wai Yip
> 
>> <compose-unknown-contact.jpg>        Gray Calhoun    Friday, January 30, 
>> 2015 3:25 PM
>> You can use a macro. I've written short-circuiting 'any' and 'all' macros 
>> that are available in this gist:
>> 
>> https://gist.github.com/grayclhn/5e70f5f61d91606ddd93
>> 
>> I'm sure they can be substantially improved; the usage would be
>> 
>> if @all [f(x) for x in 1:1000000000000000000000000000000000]
>>     ## success
>> else
>>     ## failure
>> end
>> 
>> and it rewrites the list comprehension as a loop and inserts a break 
>> statement
>> 
>> On Friday, January 30, 2015 at 12:51:13 AM UTC-6, Wai Yip Tung wrote:
>> <postbox-contact.jpg>        Wai Yip Tung    Thursday, January 29, 2015 
>> 10:51 PM
>> I want to apply function f() over a range of value. f() returns true for 
>> success and false for failure. Since f() is expensive, I want short circuit 
>> computation, i.e. it stops after the first failure. 
>> 
>> In python, I can do this in an elegant way with the all() function and 
>> generator expression.
>> 
>> if all(f(x) for x in values)
>>   # success
>> else
>>   # failure
>> 
>> From what I understand, there is no generator expression in Julia. List 
>> comprehension will evaluate the full list. Even if I try to use for loop, I 
>> can't use the control variable to check if the loop has run to finish or not.
>> 
>> i = 0
>> for i in 1:length(values)
>>     if !f(values[i])
>>       break
>>    end
>> end
>> # The status is ambiguous if i==length(values) 
>> 
>> My last resort is to add flags to indicate if is success or not. Is there 
>> some more elegant way to do this?
>> 

Reply via email to