Clojure 为什么当map在更新上下文中按预期工作时,drop没有被删除?
如果我尝试这样做,我会得到预期的结果:向量中每个条目的真与假的列表Clojure 为什么当map在更新上下文中按预期工作时,drop没有被删除?,clojure,Clojure,如果我尝试这样做,我会得到预期的结果:向量中每个条目的真与假的列表 (deftest test-weird (let [x {:nums [1 2 3 4 5 6 7 8]} res (update x :nums #(map even? %))] (println res))) 结果:{:nums假真假真} 如果我用drop-while尝试这个方法,我会原封不动地返回向量,因为我希望返回一个只包含奇数项的列表 (deftest test-weird (let
(deftest test-weird
(let [x {:nums [1 2 3 4 5 6 7 8]}
res (update x :nums #(map even? %))]
(println res)))
结果:{:nums假真假真}
如果我用drop-while尝试这个方法,我会原封不动地返回向量,因为我希望返回一个只包含奇数项的列表
(deftest test-weird
(let [x {:nums [1 2 3 4 5 6 7 8]}
res (update x :nums #(drop-while even? %))]
(println res)))
结果{:nums12345678}
我做错了什么?第一项是1,它不是偶数。因此,不会从序列中删除任何项
您真正想要的是删除偶数?%。但是,我认为说filterv odd?%读起来更好i、 说出你想要的;不要说你不想要的
还要注意的是,有一个渴望的向量版本filterv,我总是不喜欢删除这样的选项
请看。特别是每天学习Clojure的备忘
虽然名称filter和remove是非常传统的,但我总是要三思而后行,以记住是否删除或保留了真正的谓词。定义是:
-过滤器=>如果为真,则保留。。。
-删除=>如果为真,则删除。。。
在我自己的代码中,我通常更喜欢使用来强调正在发生的事情,也总是渴望发生。第一项是1,它不是偶数。因此,不会从序列中删除任何项
您真正想要的是删除偶数?%。但是,我认为说filterv odd?%读起来更好i、 说出你想要的;不要说你不想要的
还要注意的是,有一个渴望的向量版本filterv,我总是不喜欢删除这样的选项
请看。特别是每天学习Clojure的备忘
虽然名称filter和remove是非常传统的,但我总是要三思而后行,以记住是否删除或保留了真正的谓词。定义是:
-过滤器=>如果为真,则保留。。。
-删除=>如果为真,则删除。。。
在我自己的代码中,我通常更喜欢使用来强调正在发生的事情,而且总是迫不及待地发生。而不是在甚至发生时就放弃?%它删除集合中的所有元素,直到第一个true事件,并返回所有剩余元素:
任一项:filterv comp不均匀?%
或:删除偶数?%
而不是在偶数时下降?%它删除集合中的所有元素,直到第一个true事件,并返回所有剩余元素:
任一项:filterv comp不均匀?%
或:删除偶数?%