clojure - Clojure 是素数函数?
问题描述
我正在做is-prime?
的函数应该在 n 是素数时返回 true,否则返回 false,它还应该检查 n 是 1 还是 2 并做出相应的响应;如果没有,它应该调用no-divisors
函数。目前我得到这个输出:
任何人都可以看到什么是错的,将不胜感激
expected result is false,current false
expected result is true,current true
expected result is true,current false
expected result is false,current false
expected result is true,current false
没有除数?
(->> (range 2 n)
(filter #(Divides % n))
empty? ))
(println (no-divisors? 4))
是素数吗?
(defn is-prime? [n]
(and (< 1 n)
(not-any? (filter #(no-divisors? % n))
(range 2 n))))
(println "expected result is false,current"( is-prime? 1))
(println "expected result is true,current"( is-prime? 2))
(println "expected result is true,current" ( is-prime? 3))
(println "expected result is false,current"( is-prime? 4))
(println "expected result is true,current"( is-prime? 101))
解决方案
如果您按照 Clojure 约定格式化您的代码,那么很明显问题出在哪里:
(defn is-prime? [n]
(and (< 1 n)
(not-any? (filter #(no-divisors? % n))
(range 2 n))))
您使用filter
单个参数调用,该参数返回一个传感器。您对not-any?
then 的调用尝试将该转换器视为谓词,并且由于转换器在给定单个参数的情况下返回一个函数 - 并且一个函数是“真实的”(不是nil
or false
)然后not-any?
将false
根据其定义返回。
它返回的原因true
是2
它(range 2 2)
是一个空序列,并且在不调用谓词的情况下not-any?
返回一个空序列。true
推荐阅读
- plsql - 根据条件从 JSON 获取值
- java - AADSTS65001:用户或管理员未同意使用带有 ID 的应用程序
- java - 如何使用opencv在android java中获取带有统计信息的connectedComponents以及如何使用这些统计信息来获取左点、右品脱、质心、面积等
- assembly - 向 MIPS 添加新指令
- scrapy - 如何在 n 个失败的请求后告诉蜘蛛停止请求?
- javascript - 如何通过 React jsx 执行包含多个函数的 .js 文件
- javascript - 将状态传递给我的 useState 挂钩后,它是未定义的,为什么?
- javascript - 使用 Java Script fetch 命令从 google chrome 控制台请求新闻 API 运行命令时出现问题
- python - keras.engine.training.Model.compile() 参数 --loss = dice_loss -- metric= dice_loss 不一样
- algorithm - 我可以在没有固定或可变表的情况下进行霍夫曼编码吗