# Boolean logic with `and`

, `or`

, and `not`

You can test multiple conditions using boolean logic.

*Boolean logic* refers to combining and changing the results of predicates using `and`

,`or`

, and `not`

.

It follows the common sense way you look at things.

Is this *and* that true? Only if both are true. Is this *or* that true?

Yes, if either -- or both! -- are. Is this *not* true? Yes, if it's false.

## Truthy and falsey table

x | y | (`and` x y) |
(`or` x y) |
(`not` x) |
(`not` y) |
---|---|---|---|---|---|

false | false | false | false | true | true |

true | false | false | true | false | true |

true | true | true | true | false | false |

false | true | false | true | true | false |

`and`

, `or`

, and `not`

combination

`and`

, `or`

, and `not`

can be combined to create a more complex condition.

Here is an example containing several conditions for confirming if a calendar year is a leap year.

```
(defn leap-year?
"Every four years, except years divisible by 100, but yes for years divisible by 400."
[year]
(and (zero? (mod year 4))
(or (zero? (mod year 400))
(not (zero? (mod year 100))))))
;;
(leap-year? 1984)
```

### Try explain this function to another student

If it seems complicated, take each of the conditions by themselves to see what they do. Try the conditions with different years

```
()
```

If you get stuck with the exercise, ask a volunteer to help.