# Why (true? 1) is false?

**URL:** https://clojureverse.org/t/why-true-1-is-false/10431
**Category:** Beginners
**Created:** [November 19, 2023, 10:27am UTC](https://clojureverse.org/t/why-true-1-is-false/10431 "2023-11-19T10:27:04Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![hack3rcon](https://clojureverse.org/letter_avatar_proxy/v4/letter/h/96bed5/32.png) [@hack3rcon](https://clojureverse.org/u/hack3rcon)
#### Post date: [November 19, 2023, 10:27am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/1 "2023-11-19T10:27:05Z")

</div>

Hello,  
In the Clojure language, everything except `false` and `nil` is true, why `(true? 1)` is `false`?

Thank you.

---

<div class="post-metadata">

### Author: ![p-himik](https://clojureverse.org/user_avatar/clojureverse.org/p-himik/32/4137_2.png) [@p-himik](https://clojureverse.org/u/p-himik)
#### Post date: [November 19, 2023, 10:46am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/2 "2023-11-19T10:46:04Z")

</div>

> everything except `false` and `nil` is true

It’s not “true”, it’s “truthy”. Only the `true` value is true, and `true?` checks exactly for that.

Same reason why `(false? nil)` returns `false`.

---

<div class="post-metadata">

### Author: ![hack3rcon](https://clojureverse.org/letter_avatar_proxy/v4/letter/h/96bed5/32.png) [@hack3rcon](https://clojureverse.org/u/hack3rcon)
#### Post date: [November 19, 2023, 11:12am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/3 "2023-11-19T11:12:25Z")

</div>

Hello,  
Thank you so much for your reply.  
What is the difference between `true` and `truthy`?

---

<div class="post-metadata">

### Author: ![mrlasers](https://clojureverse.org/user_avatar/clojureverse.org/mrlasers/32/5146_2.png) [@mrlasers](https://clojureverse.org/u/mrlasers)
#### Post date: [November 19, 2023, 11:20am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/4 "2023-11-19T11:20:47Z")

</div>

Truthy is anything that isn’t `nil` or `false`. True is the `true` value.

---

<div class="post-metadata">

### Author: ![hack3rcon](https://clojureverse.org/letter_avatar_proxy/v4/letter/h/96bed5/32.png) [@hack3rcon](https://clojureverse.org/u/hack3rcon)
#### Post date: [November 19, 2023, 11:43am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/5 "2023-11-19T11:43:38Z")

</div>

Hello,  
Thank you so much for your reply.  
When should each be used? Why does Clojure have two types of true?

---

<div class="post-metadata">

### Author: ![dave.liepmann](https://clojureverse.org/user_avatar/clojureverse.org/dave.liepmann/32/5211_2.png) [@dave.liepmann](https://clojureverse.org/u/dave.liepmann)
#### Post date: [November 19, 2023, 12:24pm UTC](https://clojureverse.org/t/why-true-1-is-false/10431/6 "2023-11-19T12:24:04Z")

</div>

> [@hack3rcon](#):
>
> What is the difference between `true` and `truthy`?

From [Clojure - Learn Clojure - Flow Control](https://clojure.org/guides/learn/flow#_truth:)

> In Clojure, all values are logically true or false. The only “false” values are `false` and `nil` - all other values are logically true.

> [@hack3rcon](#):
>
> When should each be used? Why does Clojure have two types of true?

Most of the time you can and should work with truthy/logical true values, and not worry about `true` specifically. It’s quite handy.

Since actual `true` is necessary to interoperate with Java, it has to exist. It’s also clear and nice to have values which are completely themselves, not some sort of stand-in like 0 or 1.

---

<div class="post-metadata">

### Author: ![dave.liepmann](https://clojureverse.org/user_avatar/clojureverse.org/dave.liepmann/32/5211_2.png) [@dave.liepmann](https://clojureverse.org/u/dave.liepmann)
#### Post date: [November 19, 2023, 12:30pm UTC](https://clojureverse.org/t/why-true-1-is-false/10431/7 "2023-11-19T12:30:48Z")

</div>

A short [explorable explanation on maria.cloud](https://www.maria.cloud/gist/593da98c0a9a28f8cec752610f9cb815). Put the cursor on the outermost expression and press Command-Enter to evaluate it and see the result on the right.

---

<div class="post-metadata">

### Author: ![Linus\_Ericsson](https://clojureverse.org/user_avatar/clojureverse.org/linus_ericsson/32/1303_2.png) [@Linus\_Ericsson](https://clojureverse.org/u/Linus_Ericsson)
#### Post date: [November 24, 2023, 10:52am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/8 "2023-11-24T10:52:23Z")

</div>

This is also a heritage from Common Lisp (and other languages), maybe [Generalized Boolean is a relevant term](http://clhs.lisp.se/Body/26_glo_g.htm#generalized_boolean)?

---

<div class="post-metadata">

### Author: ![sangohan](https://clojureverse.org/user_avatar/clojureverse.org/sangohan/32/5261_2.png) [@sangohan](https://clojureverse.org/u/sangohan)
#### Post date: [November 25, 2023, 4:11am UTC](https://clojureverse.org/t/why-true-1-is-false/10431/9 "2023-11-25T04:11:01Z")

</div>

> [@hack3rcon](#):
>
> Why does Clojure have two types of true?

one way to think about it for me is that sometimes you don’t care about boolean logic, but is looking to check if a value exists.

For example, you ran a function to read the contents of a file. But you want to check if that function is successful, but without the cumbersome method of exceptions like in java. Wouldn’t it be nice if failure to read a file is treated the same as reading an empty file?

Under this train of thought, you can treat the value `nil` as empty file or an error in reading, with the other possible values as truthy. Your code is now simpler - there’s only two branches.

There’s numerous examples of this type of idiom in clojure i think.

---

<div class="post-metadata">

### Author: ![system](https://clojureverse.org/uploads/default/original/2X/5/51079bf9e4b7d9466242c06cf1e43b9f8bd6da14.png) [@system](https://clojureverse.org/u/system)
#### Post date: [May 25, 2024, 4:11pm UTC](https://clojureverse.org/t/why-true-1-is-false/10431/10 "2024-05-25T16:11:08Z")

</div>

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.
