Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每一个Clojure中的身份_Clojure_Identity - Fatal编程技术网

每一个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