场上有100只水牛。 球场上有100个搅拌器。 每只站立的水牛吃5个搅拌器。 每只躺着的水牛都吃3个打蛋器。 每3只老牛吃1个搅拌器。 提交的每种类型的水牛有多少?
这是我的Clojure代码来解决这个问题:
;; s: number of Standing buffaloes
;; l: number of Lying buffaloes
;; o: number of Old buffaloes
(for [s (range 101) l (range 101) o (range 101)
:while (and
(= 100 (+ s l o)
(= 100 (+ (* s 5) (* l 3) (* o 1/3)))))]
[s l o])
我的代码不起作用。它应该返回每种类型的水牛数量,但我的代码只返回一个空序列。它似乎在逻辑上是不正确的。怎么了?
答案 0 :(得分:2)
2个主要问题:
使用:while
,一旦条件返回false,您就会告诉它停止搜索。我相信你的意图是跳过条件错误的情况。为此,您使用:when
。
您的情况有一个错位的支撑,导致您比较布尔值和数字,这总是错误的。在(= 100 (+ s l o)
的末尾添加一个大括号。如果你正在使用Cursive来写这个,请确保你垂直对齐表格,以便Parinfer可以为你管理大括号。
答案 1 :(得分:2)