3 clojure
究竟true?说了什么?
(true? 0)= false. (if 0 "0 is true" "0 is false")= 0 is true. 为什么会发生这种情况?
在 Clojure 中,nilandfalse被视为“假”,其他所有内容都被考虑true,这解释了if您的问题中表达式的行为。
另一方面,true?谓词true仅在提供了true值时才有效。
有关更多信息,请查看本文讨论 Clojure 中的 Truthy 和 Falsey 概念。
你混淆了两件事:
if和它的后代对待这些值。true和1是值,它们是不同的:
(= true 1) ; false
Run Code Online (Sandbox Code Playgroud)
但它们与第一个参数具有相同的效果if:
(if true "Hello!" "Goodbye.") ; "Hello!"
(if 1 "Hello!" "Goodbye.") ; "Hello!"
Run Code Online (Sandbox Code Playgroud)
事实上,几乎任何第一个参数都会导致if评估并返回它的第二个参数:
(if + "Hello!" "Goodbye.") ; "Hello!"
(if *ns* "Hello!" "Goodbye.") ; "Hello!"
(if String "Hello!" "Goodbye.") ; "Hello!"
Run Code Online (Sandbox Code Playgroud)
只有两个值导致if评估并返回其第三个参数。这两个值是false和nil。
(if false "Hello!" "Goodbye.") ; "Goodbye."
(if nil "Hello!" "Goodbye.") ; "Goodbye."
Run Code Online (Sandbox Code Playgroud)
如果未提供第三个参数,则默认为nil:
(if false "Hello!") ; nil
Run Code Online (Sandbox Code Playgroud)
值之间的相同区别适用于其他 Clojure 条件,它们 - 直接或间接 - 派生自if: if-not, when, when-not, and, or, &c。它们被表示为宏,因此,就像 一样if,它们在需要之前不会评估它们的参数。
引用官方文档
(如果测试然后其他?)
评估
test. 如果不是奇异值nilorfalse,则评估并产生then,否则评估并产生else。如果else未提供,则默认为nil. 所有Clojure中的其他条件句都是基于同样的逻辑,那就是,nil和false构成逻辑谬误,以及其他一切构成了逻辑真理,而这些意义适用于整个。
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |