Programming Clojure学习笔记——与Java一起工作
来源:互联网 发布:网络大电影 杀无赦 编辑:程序博客网 时间:2024/05/16 11:43
3.2 性能优化
使用原始类型
示例:
第一种计算方法:
user=> (defn sum-to [n]
(loop [i 1 sum 0]
(if (<= i n)
(recur (inc i) (+ i sum))
sum)))
#'user/sum-to
user=> (dotimes [_ 5] (time (sum-to 10000)))
"Elapsed time: 9.112735 msecs"
"Elapsed time: 5.394529 msecs"
"Elapsed time: 2.786857 msecs"
"Elapsed time: 2.731407 msecs"
"Elapsed time: 2.598431 msecs"
第二种计算方法:
user=> (defn integer-sum-to [n]
(let [n (int n)]
(loop [i (int 1) sum (int 0)]
(if (<= i n)
(recur (inc i) (+ i sum))
sum))))
#'user/integer-sum-to
user=> (dotimes [_ 5] (time (integer-sum-to 10000)))
"Elapsed time: 2.126595 msecs"
"Elapsed time: 1.82419 msecs"
"Elapsed time: 0.105251 msecs"
"Elapsed time: 0.055963 msecs"
"Elapsed time: 0.086769 msecs"
说明:
1. 第二种计算方法将n, i, sum当作int类型处理
2. dotimes是一个计时函数
(dotimes bindings & body)
; bindings => name n
重复执行body代码,循环将name绑定到0到n-1,n即为重复次数
添加类型暗示
Clojure支持给函数参数,let绑定,变量名及表达式添加类型暗示。
类型暗示的作用:
1. 优化关键性能
2. 说明需要的类型
3. 运行时强制转换为需要的类型
示例:
user=> (defn describe-class [#^Class c]
{:name (.getName c)
:final (java.lang.reflect.Modifier/isFinal (.getModifiers c))})
user=> (describe-class StringBuffer)
{:name "java.lang.StringBuffer", :final true}
说明:给函数参数c添加类型暗示
使用原始类型
示例:
第一种计算方法:
user=> (defn sum-to [n]
(loop [i 1 sum 0]
(if (<= i n)
(recur (inc i) (+ i sum))
sum)))
#'user/sum-to
user=> (dotimes [_ 5] (time (sum-to 10000)))
"Elapsed time: 9.112735 msecs"
"Elapsed time: 5.394529 msecs"
"Elapsed time: 2.786857 msecs"
"Elapsed time: 2.731407 msecs"
"Elapsed time: 2.598431 msecs"
第二种计算方法:
user=> (defn integer-sum-to [n]
(let [n (int n)]
(loop [i (int 1) sum (int 0)]
(if (<= i n)
(recur (inc i) (+ i sum))
sum))))
#'user/integer-sum-to
user=> (dotimes [_ 5] (time (integer-sum-to 10000)))
"Elapsed time: 2.126595 msecs"
"Elapsed time: 1.82419 msecs"
"Elapsed time: 0.105251 msecs"
"Elapsed time: 0.055963 msecs"
"Elapsed time: 0.086769 msecs"
说明:
1. 第二种计算方法将n, i, sum当作int类型处理
2. dotimes是一个计时函数
(dotimes bindings & body)
; bindings => name n
重复执行body代码,循环将name绑定到0到n-1,n即为重复次数
添加类型暗示
Clojure支持给函数参数,let绑定,变量名及表达式添加类型暗示。
类型暗示的作用:
1. 优化关键性能
2. 说明需要的类型
3. 运行时强制转换为需要的类型
示例:
user=> (defn describe-class [#^Class c]
{:name (.getName c)
:final (java.lang.reflect.Modifier/isFinal (.getModifiers c))})
user=> (describe-class StringBuffer)
{:name "java.lang.StringBuffer", :final true}
说明:给函数参数c添加类型暗示
- Programming Clojure学习笔记——与Java一起工作
- Programming Clojure学习笔记——与Java一起工作
- Programming Clojure学习笔记——与Java一起工作
- Programming Clojure学习笔记——与Java一起工作
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——探索Clojure
- Programming Clojure学习笔记——前言
- Programming Clojure学习笔记——开始
- Programming Clojure学习笔记——开始
- Programming Clojure学习笔记——开始
- Programming Clojure学习笔记——并发
- Programming Clojure学习笔记——并发
- Programming Clojure学习笔记——并发
- Programming Clojure学习笔记——并发
- 转载:写毕业论文的注意了:怎样自动生成目录及从任意页开始排页码
- 揭示C++中全局类变量的构造与析构顺序
- Fedora10 允许root登录及设置密码
- kill与kill -9与killall
- android组件—ProgressBar、seekbar ImageView、TabHost
- Programming Clojure学习笔记——与Java一起工作
- mac os x 关闭checksum offload
- Programming Clojure学习笔记——与Java一起工作
- android中解析XML文件方式—DOM SAX PULL
- GCC命令选项
- Annotation实现关系映射
- Programming Clojure学习笔记——与Java一起工作
- Word,PDF,PPT,TXT之间的转换方法(
- Linux 进程间通讯(IPC)详细总结 1管道。