我坚持使用和运算符,你如何测试多个条件.我很亲密,但我坚持用clojure来解决这个问题.
(defn leap [year] (cond (and (zero? (rem year 4)) (zero? (rem year 100))) true :else false))
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
你and正确使用,但你的逻辑是错误的,不应该使用and
(defn leap
[year]
(cond (zero? (mod year 400)) true
(zero? (mod year 100)) false
(zero? (mod year 4)) true
:default false))
Run Code Online (Sandbox Code Playgroud)
(这是根据闰年维基百科页面上列出的公历中的闰年规则).
我已经避免使用嵌套逻辑运算符,因为其目的cond是将选择第一个适当选择的线性序列选择中的复杂嵌套条件简化.
理想情况下,应该使用类似clj-time的库来处理任何时间/日期逻辑,因为这些事情总是要比正常情况下的预期要困难得多.
此外,人们可以使用condp,但在这种情况下,我认为它混淆了比澄清更多:
(condp #(zero? (mod %2 %))
year
400 true
100 false
4 true
false)
Run Code Online (Sandbox Code Playgroud)