Clojure 基于函数的流程控制repeatedly 字面意思为重复函数。一般的用法如下:
- user=>(repeatedly5#(rand-int11))
- (68266)
重复产生5次随机数。rand-int 11表示0至11的随机数。
这里顺便提一下repeat函数:repeat函数接受一/两个常量参数,用法如下:
- user=>(repeat5(int(rand-int100)))
- (3030303030)
当repeat、repeatedly函数只接受一个参数时(即没有重复次数的参数),需要配合take来中止,否则会产生内存溢出的错误。如下:
- user=>(repeatedly#(rand-int11))
- OutOfMemoryErrorJavaheapspacejava.util.Arrays.copyOf(Arrays.java:2882)
- user=>(take5(repeatedly#(rand-int11)))
- (107028)
iterate:迭代函数形式如下:(iterate f v)相当于:while(true) { v = f(v) }所以一般要配合(take n sequence)来中止:
- user=>(take10(iterateinc5));(567891011121314)
- user=>(take10(iterate#(+%5)5));(5101520253035404550)
- user=>(take10(iterate#(*%2)2));(2481632641282565121024)
基于序列的流程控制dotimes 会执行给定的表达式一定次数, 一个本地binding会被给定值:从0到一个给定的数值。如下:
- user=>(dotimes[num3](println"number:"(incnum)))
- number:1
- number:2
- number:3
- nil
doseq和for的语法是一样的,只不过for返回lazy seq而doseq接受任意数量的表达式, 以有副作用的方式执行它们, 并且返回nil
- user=>(doseq[i(range10)](printlni))
- 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- nil
- user=>(doseq[i[123]j[1020]](printlni"-"j))
- 1-10
- 1-20
- 2-10
- 2-20
- 3-10
- 3-20
- nil
for、doseq都支持遍历多个集合(最右边的最快),同时还可以用:when 和 :while来过滤。
- user=>(for[x(range37)](*xx))
- (9162536)
- user=>(for[x[012345]:let[y(*x3)]:when(even?y)]y)
- (0612)
上面第二条语句可理解为:先定义x为集合,再使用let将y赋值为x*3,最后判断y是否为偶数,偶数才返回
分享到:
相关推荐
NULL 博文链接:https://clojure.iteye.com/blog/1741375
NULL 博文链接:https://clojure.iteye.com/blog/1742475
Clojure入门教程
Clojure学习教程.pdf
Clojure入门教程- Clojure – Functional Programming for the JVM中文版
Clojure入门介绍: Clojure - Functional Programming for the JVM
Clojure学习文档,Clojure-Web开发学习,覆盖了Clojure由浅入深的基本学习
本次演讲中,庄晓丹从AVOSCloud这个完全基于Clojure构建的移动云平台出发,分享Avos团队在Clojure上的实践和经验,为国内Clojure的传播贡献一份力量。
这是Programming Clojure 电子版的 纸质版本在美国亚马逊要到2009年3月才能上架 Paperback: 200 pages Publisher: Pragmatic Bookshelf (March 15, 2009) Language: English ISBN-10: 1934356336 ISBN-13: 978-...
Clojure is an opinionated language—it doesn’t try to cover all paradigms or provide every checklist bullet-point feature. Instead it provides the features needed to solve all kinds of real-world ...
clojure clojure clojureclojure clojure
Practical Clojure Clojure语言书籍
Clear, practical Clojure for the professional programmer Professional Clojure is the experienced developer's guide to functional programming using the Clojure language. Designed specifically to meet ...
【1】[Clojure编程乐趣](The Joy of Clojure).pdf 【2】Clojure – Functional Programming for the JVM中文版.pdf 【3】Clojure Cookbook.pdf 【4】Clojure Data Analysis Cookbook.pdf 【5】clojure Hand book...
动手全栈Clojure 封闭反馈循环以学习项目规模的Clojure(脚本)动机Clojure(script)是现代的Lisp方言,通常是一种不错的编程语言。 它一直在倡导的一种哲学是拥有的,而则是珍贵的瑰宝(尤其是clojurescript中的热...
[2013] Functional Programming Patterns in Scala and Clojure - Write Lean Programs for the JVM.(Michael Bevilacqua-Linn).[1937785475].pdf+epub.rar [2014] Clojure Cookbook - Recipes for Functional ...
Typed Clojure 保留了 Clojure 的优势,是 Clojure 的可选类型系统,也可以说是 Clojure 的一个库,改善了大量的静态类型安全检测。主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 ...
Clojure编程乐趣和clojure_programming.pdf两本书