recursion - 在 Clojure 中,我可以在哪里将 print 函数放置在循环/递归中?

标签 recursion clojure

Clojure 和函数式编程入门。查看尚未出版的编程 Clojure 书籍第三版第 10 章中的在一定范围内添加数字的缓慢示例。

如何向此循环添加 println 以便我可以看到 sum 的值发生变化?

; performance demo only, don't write code like this 
(defn sum-to [n]
  (loop [i 1 sum 0]
    (if (<= i n)
      (recur (inc i) (+ i sum))
      sum)))

最佳答案

loop宏接受多个主体表达式,因此您可以在 if 表达式之前插入一个具有副作用的 println 表达式:

(defn sum-to [n]
  (loop [i 1 sum 0]
    (println sum)
    (if (<= i n)
      (recur (inc i) (+ i sum)) sum)))

这里 Clojure 将使用主体中最后一个表达式的结果作为整个循环表达式的返回值。示例:

(sum-to 5)
;; 0
;; 1
;; 3
;; 6
;; 10
;; 15
;;=> 15

关于recursion - 在 Clojure 中,我可以在哪里将 print 函数放置在循环/递归中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45676785/

相关文章:

python - 为用户输入递归调用函数

algorithm - 使用递归关系分析时间复杂度

clojure - 如何在函数-main中要求命名空间?

clojure - 解构形式和组合?

java - Java中使用递归进行归并排序

python - 如何从嵌入的字典/列表中提取所有值?

javascript - Node.js 超出最大调用堆栈

使用不同 IDE 的团队中的 Clojure 缩进问题

clojure - 将插入事实从 Prolog 转换为 core.logic

java - 如何在 Clojure REPL 中要求一个 jar 文件?