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