Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure SICP sqrt NullPointerException_Clojure_Nullpointerexception_Sicp - Fatal编程技术网

Clojure SICP sqrt NullPointerException

Clojure SICP sqrt NullPointerException,clojure,nullpointerexception,sicp,Clojure,Nullpointerexception,Sicp,在Clojure中实现一些开始的SICP代码时,我遇到了意外的NullPointerException。特别是,我想实现第1.1.7节中的迭代平方根过程 代码如下: (defn square [x] (* x x)) (defn abs [x] (cond (< x 0) (- x) :else x)) (defn average [x y] (/ (+ x y) 2)) (defn sqrt ([x] (sqrt 1.0 x)) ([guess x

在Clojure中实现一些开始的SICP代码时,我遇到了意外的NullPointerException。特别是,我想实现第1.1.7节中的迭代平方根过程

代码如下:

(defn square [x] (* x x))

(defn abs [x]
  (cond 
    (< x 0) (- x)
    :else x))

(defn average [x y]
  (/ (+ x y) 2))

(defn sqrt
  ([x] (sqrt 1.0 x))
  ([guess x]
    (letfn [(good-enough? [guess]
              (< (abs (- (square guess) x)) 0.001))
            (improve [guess]
              (average guess (/ x guess)))]
      (if (good-enough? guess)
        guess
        (recur (improve guess) x)))))
(defn平方[x](*x))
(定义abs[x]
(续)
(
这适用于足够小的值,例如
(sqrt 16)
。对于任何大于大约
(square 2718)
的输入,我会得到
NullPointerException clojure.lang.Numbers.lt(Numbers.java:3693)
错误

有什么想法吗

使用整个回溯更新(我在repl中只得到上一个回溯):

线程“main”java.lang.NullPointerException中出现异常 在clojure.lang.Numbers.lt(Numbers.java:3693) 在sicp_in_clojure.第1章$sqrt$足够好\u QMARK___14.调用(第1章.clj:40) 在sicp_in_clojure.chapter_one$sqrt.invoke(chapter_one.clj:43) 在sicp_in_clojure.chapter_one$sqrt.invoke(chapter_one.clj:37) 在sicp_in_clojure.chapter_one$eval19.invoke(chapter_one.clj:48) 位于clojure.lang.Compiler.eval(Compiler.java:6465) 加载(Compiler.java:6902) 位于clojure.lang.Compiler.loadFile(Compiler.java:6863) 在clojure.main$load_script.invoke处(main.clj:282) 在clojure.main$script_opt.invoke(main.clj:342) 在clojure.main$main.doInvoke(main.clj:426) 位于clojure.lang.RestFn.invoke(RestFn.java:408) 位于clojure.lang.Var.invoke(Var.java:401) 位于clojure.lang.AFn.applyToHelper(AFn.java:161) 在clojure.lang.Var.applyTo(Var.java:518)
在clojure.main.main(main.java:37)

嘿,它对我来说工作得很好。我正在使用clojure 1.3.0。以下是终端输出。代码工作正常

[user@myhost ~]$ clj 
Clojure 1.3.0
user=> (defn square [x] (* x x))
#'user/square
(defn abs [x]
  (cond 
    (< x 0) (- x)
    :else x))
#'user/abs
(defn average [x y]
  (/ (+ x y) 2))
#'user/average
(defn sqrt
  ([x] (sqrt 1.0 x))
  ([guess x]
    (letfn [(good-enough? [guess]
              (< (abs (- (square guess) x)) 0.001))
            (improve [guess]
              (average guess (/ x guess)))]
      (if (good-enough? guess)
        guess
        (recur (improve guess) x)))))
#'user/sqrt
user=> (sqrt 16)
4.000000636692939
user=> (sqrt 2718)
52.134441897781194
user=> (sqrt 3000)
54.77225658092904
[user@myhost~]$clj
Clojure 1.3.0
user=>(defn平方[x](*x))
#'用户/平方
(定义abs[x]
(续)
((sqrt 16)
4.000000636692939
用户=>(sqrt 2718)
52.134441897781194
用户=>(sqrt 3000)
54.77225658092904

我不确定这是否仍然相关,但我认为值得使用该应用程序进行尝试,该应用程序可以让您了解事物的解释方式:


你试过最近的版本吗,比如说新版本?

你能粘贴整个回溯吗?我不能重现错误,它对我来说很好,即使是对于更大的数字。您使用的是什么版本的Clojure/Java?我也无法复制--我假设您的square函数是(defn square[x](*x))。保罗:是的,我忘了把我对正方形的定义贴上去;我将在中编辑它。我正在使用Clojure 1.3.0。java版本“1.6.0_26”java(TM)SE运行时环境(build 1.6.0_26-b03-384-10M3425)java热点(TM)64位服务器VM(build 20.1-b02-384,混合模式)用户=>(sqrt(square 5000))给了我5000.000000041231fascing:)上面的代码在Clojure 1.2.1上运行得很好,但我一直在1.3.0中得到这些NullPointerException。非常奇怪。我的clojure版本是1.3.0。你可以在我的回复中看到它!我认为这是由于clojure安装中的问题造成的。顺便说一下,这是我的java安装,java版本“1.6.0_22”OpenJDK运行时环境(IcedTea6 1.10.3)(ArchLinux-6.b22_1.10.3-1-x86_64)OpenJDK 64位服务器虚拟机(构建19.0-b09,混合模式)