`
songry
  • 浏览: 83130 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

clojure调用java方法时参数问题

 
阅读更多

    众所周知,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类的一个实例

    有关JAVA的译文 Clojure:“挑战”Java编程语言

    在今后的软件设计中无论使用Clojure语言,还是坚持使用Java语言,Clojure语言都将与java做比较,哪种是设计软件的最佳方式。 Clojure语言是一个JVM(包括Groovy,Jython和JRuby等语言)的新语言,它提供了活力,...

    clojure.java-time:用于Clojure的Java 8 Date-Time API

    clojure.java-time:用于Clojure的Java 8 Date-Time API

    gradle-java-clojure-skeleton:调用 Clojure 的 Java 应用程序的基本框架应用程序

    gradle-java-clojure-骨架一个调用 Clojure 的 Java 应用程序的基本框架应用程序,具有以下功能: 使用构建工具使用 Gradle 插件main() 在 Java 中包括本地 Java 文件包括未编译的本地 Clojure 文件包括第 3 方 ...

    nginx-clojure:用于嵌入Clojure或Java或Groovy程序的Nginx模块,通常是那些基于Ring的处理程序

    是一个模块,用于嵌入Clojure或Java或Groovy程序,通常是那些基于的处理程序。 核心功能 最新版本是v0.5.2,有关更多详细信息,请参见。 与兼容,显然支持那些基于Ring的框架,例如Compojure等。 通过使用Clojure ...

    Programming 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 ...

    clojruby:通过 JRuby 从 Clojure 调用 Ruby

    用法要运行一个简单的示例,从 Ruby 调用 Java 类: jruby simple.rb要运行稍微复杂一点的示例,请从 Clojure 调用相同的 Java 类: lein run -m interop.simple要运行一个非常令人兴奋的示例,请从 Clojure 调用 ...

    Scala与Clojure函数式编程模式:Java虚拟机高效编程1

    2前言留代码的开发者回来彻底修复该问题前保持数据不被污染。我将编写的用于解决该问题的小程序转交给了运维团队,他们将该程序运行在了一个 JVM 的安全区域。至此,

    clojure-tensorflow, Java api的Java上的一个极轻层.zip

    clojure-tensorflow, Java api的Java上的一个极轻层 和 TensorFlowJava互操作上的包装器层,用于处理 TensorFlow 。 正在启动神经网络示例(ns example.core (:require [clojure-tensorflow.ops :a

    nginx-clojure-0.5.1.tar.gz

    Nginx-Clojure 是一个 Nginx 的模块,用于嵌入 Clojure 或者 Java 或者 Groovy 程序。 可以通过nginx-clojure实现JAVA扩展nginx的功能,如权限验证。

    clojure-utils, 各种小型但方便的clojure实用程序函数库.zip

    clojure-utils, 各种小型但方便的clojure实用程序函数库 各种小型但方便的Clojure实用程序函数库特别关注:Clojure.java - 用于从Java调用Clojure的实用工具函数的Java类arrays.clj - 操作Java数组core.clj - 应该在...

    java.io:clojure.java.io 的 JK7 java.nio.file.Path 兼容性

    java.io clojure.java.io 的 JK7 java.nio.file.Path 兼容性依赖信息该库托管在 Releases 上。 依赖: [me.moocar/java.io " 0.1.0 " ]用法是 JDK7 中引入的文件路径的抽象。 这个库提供了和 Paths 之间的兼容性。 ...

    java.jdbc:Clojure的JDBC(以前称为clojure.contrib.sql)

    clojure.java.jdbc 一个低层的Clojure包装器,用于基于JDBC的数据库访问。 该项目是“稳定的”(不再是“活动的”)。 实际上,它已被取代。 有关兼容的高级DSL和迁移库,请参阅。 以前称为clojure.contrib.sql ...

    clojure-1.6

    clojure-1.6 java jvm

    Professional.Clojure.1119267277

    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, ...

    Clojure可选类型系统TypedClojure.zip

    主要特性:从 Java 中保护你的 Clojure 程序,进行安全的互操作,正确的使用外部 Java 库。Typed Clojure 支持关键字映射的使用,类型检测器中包含有用的映射操作,包括关键字查找,添加或者移除关键字,合并映射...

    Clojure编程乐趣

    第4部分包括第8章到第11章,分别介绍了宏、组合数据域代码、Clojure对Java的调用,以及并发编程等较为高级的话题。第5部分为第12章和第13章,探讨了Clojure的性能问题及其带给我们的思考。 《Clojure编程乐趣》适合...

    clojure.options:改进了Clojure函数的可选参数处理

    当defn+opts函数f调用另一个defn+opts函数g并传递其options符号时, f的文档字符串将包含有关可以传递给g的可选参数的信息。 安装 将以下内容添加到project.clj以使Leiningen为您安装clojure.options : :...

    nio:Clojure对java.nio的支持

    o Clojure对java.nio的支持。 将clojure.java.io的输入流,输出流和复制功能扩展到java.nio类。 定义新的强制功能缓冲区,字节缓冲区,字符缓冲区,双缓冲区,浮点缓冲区,整数缓冲区,长缓冲区,短缓冲区,通道,可...

    Clojure电子书合集_12本3

    [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, ...

Global site tag (gtag.js) - Google Analytics