每一个Clojure中的身份
我不明白为什么每一个Clojure中的身份,clojure,identity,Clojure,Identity,我不明白为什么each?和identity的组合在以下两个示例中给出了不同的结果。在truefalse集合中调用它时,它似乎给出了预期的答案,但没有使用数字和字符串: (每一个?身份[1 2 3 4])=>true (every?identity[true-true-false])=>false在后一种情况下,every?将返回false,因为测试集合中的一个元素是false;i、 e: => (identity false) false 当every?在向量上运行并遇到上述应用程序时,
each?
和identity
的组合在以下两个示例中给出了不同的结果。在true
false
集合中调用它时,它似乎给出了预期的答案,但没有使用数字和字符串:
(每一个?身份[1 2 3 4])
=>true
(every?identity[true-true-false])
=>false
在后一种情况下,every?
将返回false
,因为测试集合中的一个元素是false
;i、 e:
=> (identity false)
false
当every?
在向量上运行并遇到上述应用程序时,它会看到一个虚假的值,因此会返回这样的值
=> (doc every?)
-------------------------
clojure.core/every?
([pred coll])
Returns true if (pred x) is logical true for every x in coll, else
false.
在后一种情况下,
every?
将返回false
,因为测试集合中的一个元素是false
;i、 e:
=> (identity false)
false
当every?
在向量上运行并遇到上述应用程序时,它会看到一个虚假的值,因此会返回这样的值
=> (doc every?)
-------------------------
clojure.core/every?
([pred coll])
Returns true if (pred x) is logical true for every x in coll, else
false.
这来自clojure文档中的每个?: 如果(pred x)对于coll中的每个x都是逻辑true,则返回true,否则 错
通过对数组中的false值求值(identity),可以得到false,因为false的identity是false 这来自clojure文档中的每一个?: 如果(pred x)对于coll中的每个x都是逻辑true,则返回true,否则 错
通过对数组中的false值求值(identity),可以得到false,因为false的identity是false 您希望得到什么结果?我在想,identity每次都会将coll的参数传递到
every?
,every?
检查它们的真实值,通过coll,如果所有参数都与第一个参数具有相同的真实值,则返回true。因此,every?
不会强制identity
传递其他参数的真实值,因为every?
会遍历coll?您期望得到什么结果?我认为identity每次都会将coll的参数传递给every?
并且every?
会检查它们的真实值,遍历coll,如果所有参数的truthy值与第一个参数的truthy值相同,则返回true。因此,every?
不会强制identity
传递其他参数的真实值,因为every?
遍历coll?如果参数为真或假,我可以看到逻辑,但是使用数字identity
返回的数字本身是java.lang.Long,而不是真实值。因此,我认为它相当于(every?#(=%1)[1 2 3 4])
。让我困惑的是:identity返回它从coll获得的第一个参数,将其作为谓词传递给every?
,然后是every?对照第一个参数检查所有剩余参数(every?identity[false-true-true])
也返回false
,这是否意味着every?将通过标识传递给它的第一个值与其他值进行比较?@AmirTeymuri,在Clojure中,除了false
和nil
之外,每个值都是“truthy”。请参阅。@AmirTeymuri-No,identity
不仅应用于第一个元素every?
应用谓词(在本例中,identity
)应用于集合中的每个元素,直到它到达集合的末尾(在本例中,every?
返回true
),或者谓词(identity
)返回“Falsy”值(即nil
或false
),在这种情况下,every?
返回false
。在真-假参数的情况下,我可以看到逻辑,但使用数字identity
返回的数字本身是java.lang.Long,而不是truthy值。因此,我认为它相当于(every?#(=%1)[1 2 3 4])
。让我困惑的是:identity返回它从coll获得的第一个参数,将其作为谓词传递给every?
,然后是every?对照第一个参数检查所有剩余参数(every?identity[false-true-true])
也返回false
,这是否意味着every?将通过标识传递给它的第一个值与其他值进行比较?@AmirTeymuri,在Clojure中,除了false
和nil
之外,每个值都是“truthy”。请参阅。@AmirTeymuri-No,identity
不仅应用于第一个元素every?
应用谓词(在本例中,identity
)应用于集合中的每个元素,直到它到达集合的末尾(在本例中,every?
返回true
),或者谓词(identity
)返回“Falsy”值(即nil
或false
),在这种情况下,every?
返回false
。