功能的输出不会改变

时间:2018-09-16 04:17:25

标签: scheme

我曾经问过一个关于如何根据问题中的要求设置功能的问题,并且已经使用了我编写的代码,现在的问题是,无论如何,输出保持不变,无论我在k中更改参数first-value-k-or-higher x tol 1的值是多少。

这是我基于其他问题的反馈的代码:

(define (square x)
  (* x x)) 

(define (first-value-k-or-higher x tol k)
  (if (<= (abs(- x
             (square (babylonian x k))))
          tol)
      k
      (first-value-k-or-higher x tol (+ k 1))))

(define (terms-needed x tol)
  (first-value-k-or-higher x tol 1))

如果函数看起来像我上面的函数,这里是几个示例输出:

> (terms-needed 15 .001)
1
> (terms-needed 234 3)
1
> (terms-needed 23421 453)
1
> 

如果我将函数terms-needed x tol更改为以下内容:

(define (square x)
  (* x x)) 

(define (first-value-k-or-higher x tol k)
  (if (<= (abs(- x
             (square (babylonian x k))))
          tol)
      k
      (first-value-k-or-higher x tol (+ k 1))))

(define (terms-needed x tol)
  (first-value-k-or-higher x tol 100))

新功能将输出:

> (terms-needed 15 .0001)
100
> (terms-needed 243 3)
100
> 

Terms-needed的计算结果应等于tol之内的无限和中的项数,即最小的k,以使{{1}之间的差}和x小于(square (babylonian x k))。正如我已经提到的,问题是无论我为tol的参数值设置什么值,我都会得到相同的“ 1”输出。我也认为这是问题的根源,因为如果我将terms-needed x tol更改为(first-value-k-or-higher x tol 1))或其他任何值(first-value-k-or-higher x tol 2))都会输出该值,例如使用{{1} }将输出2。

这是运行程序(first-value-k-or-higher x tol 2))所需的功能(first-value-k-or-higher x tol 2)),而程序babylonian x k则需要运行:

first-value-k-or-higher x tol k

terms-needed x tol函数应该使用巴比伦方法计算根,并求出第k个近似值(Sk)。 (define (babylonian x k) (if (>= x 1) (if (= k 0) (/ x 2) (* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2)))))) 1) ) 函数也通过所有测试。

此处是my earlier problem,以获取更多背景信息

1 个答案:

答案 0 :(得分:0)

不,

(define (babylonian x k)
    (if (>= x 1)
      (if (= k 0)
          (/ x 2)
          (* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
      1)
  )

可能无法计算x的“第k个近似值”,因为内部k的替代形式中没有if