将计算结果作为参数添加到Scheme中

将计算结果作为参数添加到Scheme中,scheme,syntax-error,square-root,Scheme,Syntax Error,Square Root,我试图做一个程序来计算Scheme中一个数字的平方,但它给了我一个错误,我给了abs过程两个参数,而不是一个参数。这是我在Scheme中的第一个程序,我不知道怎么做。我试着改变支架的位置,但不起作用 (define (square X) (try 1 X)) (define (try guess X) (if (good-enaugh? guess X) guess ((try improve guess X) X))) (define (

我试图做一个程序来计算Scheme中一个数字的平方,但它给了我一个错误,我给了abs过程两个参数,而不是一个参数。这是我在Scheme中的第一个程序,我不知道怎么做。我试着改变支架的位置,但不起作用

(define (square X)
    (try 1 X))


(define (try guess X)
    (if (good-enaugh? guess X)
        guess
        ((try improve guess X) X)))


(define (good-enaugh? guess X)
    (< (abs(- (* guess guess) X)) 0.0001))


(define (improve guess X)
    (/(+ (/ X guess) guess) 2))
(定义(正方形X)
(试一试)
(定义(尝试猜测X)
(如果(好的答案?猜X)
猜测
((尝试改进猜测X)X)))
(定义(好的用法?猜测X)
(<(绝对绝对值(((*猜测)X))0.0001))
(定义(改进猜测X)
(/(+(/X猜测)猜测)2)

你就快到了。问题是
try
中条件的第二个分支的括号太多

(define (try guess X)
    (if (good-enaugh? guess X)
        guess
        ((try improve guess X) X)))
应成为:

(define (try guess X)
    (if (good-enaugh? guess X)
        guess
        (try (improve guess X) X)))
您可以调用函数
try
。第一个参数是
(改进猜测X)
的结果,第二个参数是数字
X
。请注意,我还将调用前后的括号改为
improve
。您编写它的方式是调用函数
try
,第一个参数是函数
improve
,第二个参数是
guess
,第三个参数是
X

全源 为了更好地测量,下面列出了完整的来源

(define (square X)
    (try 1 X))


(define (try guess X)
    (if (good-enaugh? guess X)
        guess
        (try (improve guess X) X)))


(define (good-enaugh? guess X)
    (< (abs(- (* guess guess) X)) 0.0001))


(define (improve guess X)
    (/(+ (/ X guess) guess) 2))


> (square 13)
3,....
(定义(正方形X)
(试一试)
(定义(尝试猜测X)
(如果(好的答案?猜X)
猜测
(尝试(改进猜测X)X)))
(定义(好的用法?猜测X)
(<(绝对绝对值(((*猜测)X))0.0001))
(定义(改进猜测X)
(/(+(/X猜测)猜测)2)
>(第13广场)
3.

现在,它给我的错误是“错误:执行:未绑定符号:“足够好?”[square,try]”。我用[link](repl.it)做翻译。哦,对了,我把名字改成了正确的英文拼写。我将修改。我添加了更改,它告诉我abs有两个参数,而不是一个。我做了这个(<(abs(abs(*abs(guess)guess))X))0.001)作为解决办法,然后它告诉我“1不是函数”。你用的是什么方言?R5R?R6RS?我已经添加了一个到repl.it实例的链接,该实例包含此代码。它很好用。