gpt4 book ai didi

function - 为什么我的Scheme Cube-Root程序中出现此错误?

转载 作者:行者123 更新时间:2023-12-03 08:22:09 26 4
gpt4 key购买 nike

因此,我正在通过SICP进行工作,其中一个问题(1.8)是使用Newton-Raphson method实现类似于平方根过程的立方根过程。我编写了程序并尝试执行该程序,但出现了以下错误:*: number required, but got #<Closure> [cubert, cubeiter, cubeiter, good-enough, cube, sq, *]
这是我的代码:

(define (sq x)
(* x x))
(define (cube x)
(*(sq x) x))
(define (abs x)
(if (< x 0)
(-x)
x))
(define (good-enough guess x)
(< (abs (- x (cube guess)) )0.0001))
(define (improve guess x)
(- guess (/ (- (cube guess) 3) (* 3 (sq x)))))
(define (cubeiter guess x)
(if (good-enough guess x)
guess
(cubeiter improve x)))
(define (cubert x) (cubeiter 1.0 x))

(cubert 27)

谁能解释这个错误的含义以及如何解决?什么是 #<Closure>

提前致谢!

最佳答案

#<Closure>是表示过程对象的实现方法。如果x计算得出该值,则(x ...)调用该过程。例如。 (+ 2 3) ; ==> 5,但+ ; ==> #<Closure>。 (+是一个原始类型,因此它的显示方式可能有所不同,但实际上并不重要。您不应打印它:))

我看到您调用(cubeiter improve x),但是guess应该是一个过程似乎并不正确,因为初始调用传递的是1.0这是一个数字。显然其中之一是错误的。也许您应该调用improve并将结果传递给cubeiter?例如。 (cubeiter (improve ...) x)
另外,您在abs中有一个错误。 (-x)(- x)不同,后者是(- 0 x)的缩写。您正在调用没有参数的名为-x的过程。
abs错误使我认为您可能未在测试代码的各个部分。如果您不是,那么一旦基于代码的代码变大,您就会遇到问题。制作cubeiter时,很高兴知道您使用的过程可以正常工作,并且错误很可能是cubeiter而不是improvegood-enoughabs。进行单个过程的全部目的是能够测试各个部分,以确保可以正常运行,并且可以在更高级别的抽象上使用它时停止考虑它的实现。

关于function - 为什么我的Scheme Cube-Root程序中出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53688749/

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