codecamp

Clojure 递归

我们已经在前面的主题中看到了recur语句,而'for'循环有点像一个循环,recur是Clojure中的一个真正的循环。

如果你有编程背景,你可能听说过尾递归,这是功能语言的一个主要特点。 这个循环特殊形式是实现尾递归的形式。 如“尾递归”一词所示,recur必须在尾部位置调用。 换句话说,recur必须是最后一个要评估的东西。

recur语句的最简单的例子在'for'循环中使用。 在以下示例中,recur语句用于更改变量“i”的值,并将变量的值反馈回循环表达式。

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (loop [i 0]
      (when (< i 5)
      (println i)
      (recur (inc i)))))
(Example)

输出

以上示例输出以下结果:

0
1
2
3
4

Clojure Numbers
Clojure 文件 I/O
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Clojure Useful Resources

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }