用Clojure检查闰年

Zac*_*Zac 2 clojure

我坚持使用运算符,你如何测试多个条件.我很亲密,但我坚持用clojure来解决这个问题.

(defn leap [year] (cond (and (zero? (rem year 4)) (zero? (rem year 100))) true :else false))
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

noi*_*ith 5

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)