У меня проблемы с тем, что мой код кажется неполным и явно неправильным.Для моей функции (terms-needed x tol)
я должен найти наименьшее k
такое, чтобы разница между x
и (square (babylonian x k))
была меньше tol
(допуск).Другими словами, мы должны измерить, насколько большим должен быть k
в функции (babylonian x k)
, чтобы обеспечить хорошее приближение квадратного корня.
На данный момент я получаю сообщение об ошибке приложения: не процедура; "с моим кодом
(define (square x)
(* x x))
(define (first-value-k-or-higher x tol k)
(if (<= (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))
Мы должны использовать вспомогательную функцию (first-value-k-or-higher x tol k)
, которая оценивается в k
, если (square (bablyonian x k))
находится в пределах tol
аргумента x
, в противном случае вызывает себя рекурсивнос большим k
.
Это функция, которая необходима для работы (terms-needed x tol)
:
(define (babylonian x k)
(if (>= x 1)
(if (= k 0)
(/ x 2)
(* (/ 1 2) (+ (expt x (/ 1 2)) (/ x (expt x (/ 1 2))))))
1)
)
. Здесь приведен полный текст, предоставляющий полный контекст о том, какой должна быть проблема.
Теперь мы измерим, сколько должно быть k
в вышеуказанной функции, чтобы обеспечить хорошее приближение квадратного корня.Вы напишете функцию SCHEME (terms-needed x tol)
, которая будет оценивать число членов в бесконечной сумме, которое должно быть в пределах tol
, то есть наименьшее k
, такое, чтобы разница между x
и (square (babylonian x k))
составляламенее чем tol
.Замечание 2. На первый взгляд, проблема определения (terms-needed x tol)
выглядит немного сложной, потому что совсем не очевидно, как выразить ее в терминах меньшей задачи.Но вы можете написать вспомогательную функцию (first-value-k-or-higher x tol k)
, которая оценивается в k
, если (square (bablyonian x k))
находится в пределах tol
от аргумента x
, в противном случае рекурсивно вызывает себя с большим k
.