That's not the behavior I get on my system:

``` clj
=> (and True (print "hello"))
hello
=> (and False (print "hello"))
hello
False
=> (and True (do (print "hello") True))
hello
True
=> (and False (do (print "hello") True))
hello
False
```
I think that all params are evaluated.