gpt4 book ai didi

clojure - SICP sqrt NullPointerException

转载 作者:行者123 更新时间:2023-12-04 16:01:02 25 4
gpt4 key购买 nike

我在 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)))))

这适用于足够小的值,例如 (sqrt 16) .我得到一个 NullPointerException clojure.lang.Numbers.lt (Numbers.java:3693)任何大于大约 (square 2718) 的输入的错误.

有任何想法吗?

更新整个回溯(前一个是我在 repl 中得到的):

线程“main”中的异常 java.lang.NullPointerException
在 clojure.lang.Numbers.lt(Numbers.java:3693)
在 sicp_in_clojure.chapter_one$sqrt$good_enough_QMARK___14.invoke(chapter_one.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)
在 clojure.lang.Compiler.load(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)

最佳答案

不确定这是否仍然相关,但我认为值得使用 LightTable Playground 尝试一下。应用程序,可让您查看事物的解释方式:

light table demo screenshot of above code

你有没有尝试过最近的版本,比如新的 Clojure 1.4.0释放?

关于clojure - SICP sqrt NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com