Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 为什么当map在更新上下文中按预期工作时,drop没有被删除?_Clojure - Fatal编程技术网

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不均匀?% 或:删除偶数?%