Ваша функция sum_sqrt_sums
не вычисляется
sqrt(4.0 +. 2.0) +. sqrt(2.0 +. 6.0) +. sqrt(6.0 +. 3.0)
но
sqrt (sqrt (sqrt(2.0 +. 4.0) +. 6.0) +. 3.0)
То, что вы хотите сделать, это сохранить последний элемент, видимый в аккумуляторе, добавить его к следующему и добавить их сумму в квадрате к аккумулятору:
let sum_sqrt_sums = function
| [] | [_] -> raise(Failure "Nope")
| x::xs ->
let _, res = foldl (fun (x, acc) y -> (y, sqrt (x +. y) +. acc)) (x, 0.) xs in
res
( в качестве примечания, ваша foldl
функция является List.fold_left
функцией )
Обновление (версия с другим именем переменной, чтобы избежать путаницы):
let sum_sqrt_sums = function
| [] | [_] -> raise(Failure "Nope")
| x::xs ->
let _, res = foldl (fun (e, acc) y -> (y, sqrt (e +. y) +. acc)) (x, 0.) xs in
res