众所周知,clojure基于jvm,可以在不做引入的情况下调用java.lang下面的任意对象,但是,在调用交互中
需要注意clojure中的自定义类型,下面我们用代码来说明一下。
下面的例子是采用牛顿法求平方根
的clojure实现:
user> (defn average [x y] (/ (+ x y) 2)) ;定义求平均值函数
user> (defn good-enough? [guess x] ;定义平方根的精确度
(< (Math/abs (- (* guess guess) x)) 0.001))
user> (defn sqrt-iter [guess x] ;定义求平方根的函数
(loop [g guess]
(if (good-enough? g x) g
(recur (average g (/ x g)))))
上面代码看着没有任何问题,但是运行时会抛出abs的参数异常,为什么呢?
问题出在(/ x g)这儿,clojure中的除法机制是如果无法整除,返回值默认是分数(clojure.lang.Ratio),而
java.lang.Math中的abs方法接收的参数没有这个类型,所以会抛出abs的参数异常。
我们把除法的返回值强制转换为小数后,程序就能够正常运行了:
user> (defn sqrt-iter [guess x]
(loop [g guess]
(if (good-enough? g x) g
(recur (average g (double (/ x g)))))))
user> (sqrt-iter 1 9)
3.00009155413138
分享到:
相关推荐
Clojure调用Java类的一个实例
在今后的软件设计中无论使用Clojure语言,还是坚持使用Java语言,Clojure语言都将与java做比较,哪种是设计软件的最佳方式。 Clojure语言是一个JVM(包括Groovy,Jython和JRuby等语言)的新语言,它提供了活力,...
clojure.java-time:用于Clojure的Java 8 Date-Time API
gradle-java-clojure-骨架一个调用 Clojure 的 Java 应用程序的基本框架应用程序,具有以下功能: 使用构建工具使用 Gradle 插件main() 在 Java 中包括本地 Java 文件包括未编译的本地 Clojure 文件包括第 3 方 ...
是一个模块,用于嵌入Clojure或Java或Groovy程序,通常是那些基于的处理程序。 核心功能 最新版本是v0.5.2,有关更多详细信息,请参见。 与兼容,显然支持那些基于Ring的框架,例如Compojure等。 通过使用Clojure ...
Description: Clojure is a dynamic language for the Java Virtual Machine, with a compelling combination of features: Clojure is elegant. Clojure's clean, careful design lets you write programs that ...
用法要运行一个简单的示例,从 Ruby 调用 Java 类: jruby simple.rb要运行稍微复杂一点的示例,请从 Clojure 调用相同的 Java 类: lein run -m interop.simple要运行一个非常令人兴奋的示例,请从 Clojure 调用 ...
2前言留代码的开发者回来彻底修复该问题前保持数据不被污染。我将编写的用于解决该问题的小程序转交给了运维团队,他们将该程序运行在了一个 JVM 的安全区域。至此,
clojure-tensorflow, Java api的Java上的一个极轻层 和 TensorFlowJava互操作上的包装器层,用于处理 TensorFlow 。 正在启动神经网络示例(ns example.core (:require [clojure-tensorflow.ops :a
Nginx-Clojure 是一个 Nginx 的模块,用于嵌入 Clojure 或者 Java 或者 Groovy 程序。 可以通过nginx-clojure实现JAVA扩展nginx的功能,如权限验证。
clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...
java.io clojure.java.io 的 JK7 java.nio.file.Path 兼容性依赖信息该库托管在 Releases 上。 依赖: [me.moocar/java.io " 0.1.0 " ]用法是 JDK7 中引入的文件路径的抽象。 这个库提供了和 Paths 之间的兼容性。 ...
clojure.java.jdbc 一个低层的Clojure包装器,用于基于JDBC的数据库访问。 该项目是“稳定的”(不再是“活动的”)。 实际上,它已被取代。 有关兼容的高级DSL和迁移库,请参阅。 以前称为clojure.contrib.sql ...
clojure-1.6 java jvm
Clojure is a modern dialect of Lisp, designed for concurrency and Java compatibility. It can be used with the Java virtual machine, Microsoft's Common Language Runtime, and JavaScript engines, ...
主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 Java 库。Typed Clojure 支持关键字映射的使用,类型检测器中包含有用的映射操作,包括关键字查找,添加或者移除关键字,合并映射...
第4部分包括第8章到第11章,分别介绍了宏、组合数据域代码、Clojure对Java的调用,以及并发编程等较为高级的话题。第5部分为第12章和第13章,探讨了Clojure的性能问题及其带给我们的思考。 《Clojure编程乐趣》适合...
当defn+opts函数f调用另一个defn+opts函数g并传递其options符号时, f的文档字符串将包含有关可以传递给g的可选参数的信息。 安装 将以下内容添加到project.clj以使Leiningen为您安装clojure.options : :...
o Clojure对java.nio的支持。 将clojure.java.io的输入流,输出流和复制功能扩展到java.nio类。 定义新的强制功能缓冲区,字节缓冲区,字符缓冲区,双缓冲区,浮点缓冲区,整数缓冲区,长缓冲区,短缓冲区,通道,可...
[2016] Clojure for Java Developers.(Eduardo Diaz).[178528150X].pdf [2016] Clojure in Action, 2nd Edition.(Amit Rathore, Francis Avila).[1617291528].pdf [2016] Learning ClojureScript.(W. David Jarvis, ...