Function 为什么我的Scheme多维数据集根程序中会出现此错误?

Function 为什么我的Scheme多维数据集根程序中会出现此错误?,function,math,error-handling,functional-programming,scheme,Function,Math,Error Handling,Functional Programming,Scheme,我正在努力解决1.8中的一个问题,就是使用。我编写了程序并尝试执行它,但出现了以下错误:*:需要数字,但得到了[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

我正在努力解决1.8中的一个问题,就是使用。我编写了程序并尝试执行它,但出现了以下错误:*:需要数字,但得到了[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)
谁能解释一下这个错误是什么意思,以及我如何修复它?是什么

提前谢谢

是表示过程对象的实现方法。如果x的计算结果是,那么x。。。调用该过程。例如+23;==>5,但是+;==>。+是一个基本体,因此它可能会以不同的方式显示,但这并不重要。您不应该打印它:

我看到你调用cubeiter改进x,但是猜测应该是一个过程,这似乎不正确,因为最初的调用通过了1.0,这是一个数字。显然其中一个是错的。也许你应该调用改进,并将结果传递给cubeiter?cubeiter改进。。。x

此外,abs中也有一个错误-x与-x不同,后者是-0x的缩写。您正在调用一个名为-x的过程,没有参数

abs错误使我认为您可能没有测试代码的各个部分。如果不是,那么一旦基于代码的代码变得更大,就会出现问题。在制作cubeiter时,最好知道您在其中使用的程序是有效的,并且错误很可能出现在cubeiter中,而不是改进、足够好或abs。制定单独的过程的全部目的是能够测试各个部分,这样您就可以确保它能够工作,并且在更高的抽象级别上使用它时,您就可以停止考虑它的实现