小编fiz*_*bin的帖子

如何从嵌套剂量中脱颖而出

我有一个关于嵌套doseq循环的问题.在start函数中,一旦我找到答案,我将atom设置为true,以便外部循环验证:while失败.然而,似乎它没有打破它,循环继续前进.它出什么问题了?

我也对原子,引用,代理的使用感到困惑(为什么当更新函数的机制几乎相同时它们有不同的名称?)等.在这种情况下使用原子作为标志是否可以?显然我需要一个像对象一样的变量来存储一个状态.

(def pentagonal-list (map (fn [a] (/ (* a (dec (* 3 a))) 2)) (iterate inc 1)))


(def found (atom false))


(defn pentagonal? [a]
  (let [y (/ (inc (Math/sqrt (inc (* 24 a)))) 6)
        x (mod (* 10 y) 10)]
  (if (zero? x)
    true
    false)))


(defn both-pent? [a b]
  (let [sum (+ b a)
       diff (- a b)]
    (if (and (pentagonal? sum) (pentagonal? diff))
        true
        false)))

(defn start []
 (doseq [x pentagonal-list :while (false? @found)]
  (doseq [y pentagonal-list :while …
Run Code Online (Sandbox Code Playgroud)

clojure

9
推荐指数
1
解决办法
3054
查看次数

标签 统计

clojure ×1