Извините за действительно плохое название, но я не смог придумать лучшего ...
Я следую Структуре и интерпретации компьютерных программ и пытаюсь сделать пример из раздела 1.1.7 о методе последовательной аппроксимации Netwon для нахождения квадратных корней.
Я пытаюсь реализовать его в F #, и я верю, что я довольно близок к этому, но, вероятно, существует какая-то синтаксическая проблема.
Вот мой код (я использовал linqpad, следовательно, Dump ()), ниже следует вопрос
let square a = a * a
let average a b = (a + b)/2.0
let a = average 2.0 1.0
a.Dump()
let improve guess x = average guess x
let i = improve 2.0 1.0
i.Dump()
let goodEnough guess x = abs (x - square(guess)) < 0.001
let g = goodEnough 3.0 4.0
g.Dump()
let g2 = goodEnough 2.0 4.0
g2.Dump()
let rec sqrtIterator guess x =
if goodEnough guess x then guess
else sqrtIterator(improve(guess x) x)
let sqrt x = sqrtIterator 1.0 x
Я получаю сообщение об ошибке при рекурсивном вызове sqrtIterator, говорящее: ожидалось, что это выражение будет иметьтип float
, но здесь имеет тип float -> float
.
Так что, похоже, мне не хватает параметра, заставляющего его возвращать функцию, принимающую один параметр, но я не вижу, что не так?