clojure:why(some#)(and…';不返回第一个错误项

clojure:why(some#)(and…';不返回第一个错误项,clojure,Clojure,很抱歉问了这么一个基本的问题,但我不明白为什么这个函数会起作用。我正在做指南,碰巧遇到了这个集合: (def food-journal [{:month 1 :day 1 :human 5.3 :critter 2.3} {:month 1 :day 2 :human 5.1 :critter 2.0} {:month 2 :day 1 :human 4.9 :critter 2.1} {:month 2 :day 2 :human 5.0 :critter 2.5}

很抱歉问了这么一个基本的问题,但我不明白为什么这个函数会起作用。我正在做指南,碰巧遇到了这个集合:

(def food-journal
  [{:month 1 :day 1 :human 5.3 :critter 2.3}
   {:month 1 :day 2 :human 5.1 :critter 2.0}
   {:month 2 :day 1 :human 4.9 :critter 2.1}
   {:month 2 :day 2 :human 5.0 :critter 2.5}
   {:month 3 :day 1 :human 4.2 :critter 3.3}
   {:month 3 :day 2 :human 4.0 :critter 3.8}
   {:month 4 :day 1 :human 3.7 :critter 3.9}
   {:month 4 :day 2 :human 3.7 :critter 3.6}])
使用这个函数可以得到第一张有key的地图:critter,其值大于3

 (some #(and (> (:critter %) 3) %) food-journal)
我不明白的是
(and)
的用法,我认为它应该返回从内部表达式返回的第一个假值。也就是说,它应该返回第一个映射,因为该映射的:critter不大于3。

这里的关键是如何使用谓词函数

返回coll中任意x的第一个逻辑真值(pred x), 否则零

因此,当
返回非true时,
一些
只是继续查找。将
%
作为最后的
形式的原因是
一些
返回匹配的实际项,而不是
(>(:critter%)3的值

这里的关键是如何使用谓词函数

返回coll中任意x的第一个逻辑真值(pred x), 否则零


因此,当
返回非true时,
一些
只是继续查找。
%
作为最后的
表单的原因是
一些
返回匹配的实际项目,而不是
的值(>(:critter%)3)

一些
对食品日志中的每个元素计算谓词函数,直到谓词函数返回逻辑真值

集合中的每个项目(如
{:第一个月:第一天:人类5.3:小动物2.3}
)都会自行评估为真

因此,谓词函数需要为集合中
:critter
不是
>3
的所有项目生成false

在元素本身和:critter>3都计算为true时计算为true

这里令人困惑的是,元素本身与大于比较的布尔值之间存在逻辑AND


因此,
始终为真,因此始终返回第一个元素,从而忽略大于测试。

一些
对食物日志中每个元素的谓词函数求值,直到谓词函数返回逻辑真值

集合中的每个项目(如
{:第一个月:第一天:人类5.3:小动物2.3}
)都会自行评估为真

因此,谓词函数需要为集合中
:critter
不是
>3
的所有项目生成false

在元素本身和:critter>3都计算为true时计算为true

这里令人困惑的是,元素本身与大于比较的布尔值之间存在逻辑AND


因此,
总是正确的,因此总是返回第一个元素,从而忽略大于测试。

这里的
时的
工作相同。这里的
时的
工作相同。谢谢。我想让我困惑的是我对
的想法(和)
的目的是返回一个false并忽略truthy。但是在这里,正如您所说,每个false表达式都会被
(某些)
返回但忽略。当它最终计算truthy时,它会返回列表中的最后一项(即映射),并且该映射被发送到
(某些)
(和)
的意思是,它的目的是返回一个假表达式并忽略它。但是,正如你所说,在这里,每个假表达式都返回,但被
(一些)忽略
。当它最终计算truthy时,它返回列表中的最后一项(即映射),该映射被发送到
(某些)
,并计算为truthy,因此被
(某些)
接受。