(first (filter identity
[(and (condition-three) (action-three))
(and (condition-one) (action-one))
(and (condition-four) (action-four))
(and (condition-two) (action-two))]))
And you could write a macro to do it with nice syntax. A bit more work and you could parallelize it.You probably wouldn't want to most of the time, but if the conditions are slow to test but otherwise inexpensive, it might be a useful optimization.