Во-первых, вы пропускаете if
там:
(define (newtonRhap x ff ffx)
( <b>if</b> (> (- x (/ ff ffx)) TOL)
(newtonRhap (- x (/ ff ffx)) ff ffx)
(list x) ) )
Без него вы бы вызывали результат булева теста как функцию со следующими значениями двух форм в качестве аргументов (это можетработать на ленивом функциональном языке с условными кодами, закодированными Церковью, но это не главное, и Схема / Ракетка не ленива)1008 * функции , но вы рассматриваете их, как если бы они были числовыми значениями .Исправление дает нам
(define (nl x) ; for debugging insight;
(newline) ; for production redefine it as
(display x) ; (define (nl x) x)
x)
(define (newtonRhap x ff ffx)
(let ((new-x (nl (- x (/ (ff x) (ffx x)))))) ; Follow The Formula
( if (> (abs (- x new-x)) TOL) ; use abs
(newtonRhap new-x ff ffx) ; make next step
(list new-x) ) ) ) ; return the new x, it's closer to the true result
Теперь мы можем запустить
(display (newtonRhap x f fx))
3.333333333333333
3.019607843137255
3.0000762951094835
3.000000001164153
3.0(3.0)
>