for循环之谜(Clojure)[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了for循环之谜(Clojure)[重复]相关的知识,希望对你有一定的参考价值。

此问题已经在这里有了答案:

我是clojure的新手,正在实现Kadane的算法。代码的质量很差,这很好,因为我想先编写不好的代码,然后逐步提高。不知何故,我的for循环未执行。请指导

我尝试过各种打印组合,但失败了,因此我找你

(defn max-contigous-sub-array [list]
  (let [local-sum (atom (first list))
        global-sum (atom (first list))]
    (doseq [x (rest list)]
      (do
        (reset! local-sum (max x (+ @local-sum x)))
        (if (> @local-sum @global-sum)
          (reset! global-sum @local-sum))))
    @global-sum))
答案

clojure中的for函数不是强制性循环,而是用于产生延迟生成的列表推导的函数。对于您的情况,应使用doseq循环。

https://clojuredocs.org/clojure.core/for

https://clojuredocs.org/clojure.core/doseq

之所以从不执行当前循环,是因为您从未对for函数返回的延迟序列执行任何操作,因此永远不会评估延迟序列。

以上是关于for循环之谜(Clojure)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

创建自己的代码片段(CodeSnippet)

clojure for function resetts let

c_cpp 这个简单的代码片段显示了如何使用有符号整数在C中完成插值。 for()循环确定要插入的范围

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

let 内的 Clojure 循环(全局 v 局部变量)

js数组遍历方法总结