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,因此被(某些)
接受。