gpt4 book ai didi

clojure - 这段 Clojure 代码中的错误在哪里?

转载 作者:行者123 更新时间:2023-12-02 02:06:18 25 4
gpt4 key购买 nike

我有这个 Clojure 代码:

(defn apply-all-to-arg [& s]
(let [arg (first s)
exprs (rest s)]
(for [condition exprs] (condition arg))))

(defn true-to-all? [& s]
(every? true? (apply-all-to-arg s)))

这是测试代码:

(apply-all-to-arg 2 integer? odd? even?)

=>(真假真)

(every? true? (apply-all-to-arg 2 integer? odd? even?)

=> 假

(true-to-all? 2 integer? odd? even?)

=> 正确

我的问题是:为什么该功能千真万确?返回 true(它必须返回 false)

最佳答案

true-to-all? 使用单个参数 s 调用 apply-all-to-arg。所以你不是在调用 (every? true? (apply-all-to-arg 2 integer? odd? Even?),而是:

(every? true? (apply-all-to-arg (list 2 integer? odd? even?))

因此,在 apply-all-to-arg 中,arg 的值将是该列表,而 exprs 的值将是空列表。由于对于空列表,every? 将为 true,无论条件是什么,您都会返回 true。

要解决此问题,您可以更改 apply-all-to-arg,以便它接受列表而不是可变数量的参数,或者您可以更改 true-to- all?,以便它将 s 的内容作为多个参数而不是单个列表传递(通过使用 apply)。

关于clojure - 这段 Clojure 代码中的错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12119842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com