Oh yeah, "or"! Perfect!

On Wed, May 1, 2013 at 12:46 PM, Cedric Greevey <cgree...@gmail.com> wrote:
> What about
>
> (or
>   (validate-data-1 data-1)
>   (validate-data-2 data-2)
>   (validate-data-3 data-3))
>
> ?
>
> Or
>
> (some identity
>   (map #(%1 %2)
>        [validate-data-1 validate-data-2 validate-data-3]
>        [data-1 data-2 data-3]))
>
> (though that might realize elements past the first non-nil one if vectors
> produce chunked seqs).
>
>
>
> On Wed, May 1, 2013 at 12:13 PM, Steven Degutis <sbdegu...@gmail.com> wrote:
>>
>> I've found myself writing a validator function.
>>
>> It has a list of internal validator functions, and should return the first
>> one that evaluates to non-nil, without evaluating the rest.
>>
>> Here's the code I've come up with:
>>
>> (defn validate-something [data-1 data-2 data-3]
>>   (some #(%)
>>         [#(validate-data-1 data-1)
>>          #(validate-data-2 data-2)
>>          #(validate-data-3 data-3)]))
>>
>> But this code just feels ugly and I feel like it could be more idiomatic.
>>
>> For one thing, it shares something in common with cond, since it should
>> return the first one that returns non-nil. But each cond clause takes two
>> params, the test and the result, whereas this is just one and the same. So I
>> don't know how I would use cond with it.
>>
>> Alternatively, that property could be implemented by the lazy-evaluation
>> of map. My first impulse was to do (find-first (map apply [f1 f2 f3])) but
>> first of all I'd have to write find-first (or use something in contrib), and
>> second of all apply seems to expect args and gave me an error. But maybe
>> that last part was just me being overtired.
>>
>> Does anyone here have a more idiomatic or elegant solution than the (some)
>> one above?
>>
>> -Steven
>>
>> --
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>
>
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to