The Clojure (or Lisp) Equivalent of a Compound Boolean Test

In C++ I'd write something like this:

if (a == something && b == anotherthing)

Am I correct in thinking the Clojure equivalent is something like this:

(if (= a something)
    (if (= b anotherthing)

Or is there another way to perform a logical "and" that I've missed? As I said the latter form seems to work correctly--I was just wondering if there's some simpler way to perform the logical and. And searching for "boolean" "logical" and "and" on the Clojure Google Group turned up too many results to be much use.


In Common Lisp and Scheme

(and (= a something) (= b another) (foo))

In Common Lisp, the following is also a common idiom:

(when (and (= a something) (= b another))

Compare this to Doug Currie's answer using (and ... (foo)). The semantics are the same, but depending on the return type of (foo), most Common Lisp programmers would prefer one over the other:

  • Use (and ... (foo)) in cases where (foo) returns a boolean.

  • Use (when (and ...) (foo)) in cases where (foo) returns an arbitrary result.

An exception that proves the rule is code where the programmer knows both idioms, but intentionally writes (and ... (foo)) anyway. :-)

In Clojure I would normally use something like:

  (and (= a something) (= b anotherthing))

It is clearly possible to be more concise (e.g. Doug's answer) but I think this approach is more natural for people to read - especially if future readers of the code have a C++ or Java background!

It's really cool! (and x y) is a macro -- you can check the source code at -- that expands to (if x y false) equivalent to:

if (x) {
  if (y) {
} else {

(or x y) is similar but reversed.

Need Your Help

SimpleEKDemo Example with allowsEditing = YES but show only “Done” button in iPad

xcode ipad eventkit

The SimpleEKDemo example is delivered with "Targeted Device Family = iPhone" in the Build tag of Project Settings. It works for both iPhone and iPad, the "Edit" barButton showed in the

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.