Я пишу код, который должен принимать список в качестве входных данных и возвращать новый список в качестве выходных данных, где для каждого индекса значения этого индекса являются суммой предыдущих элементов введенного списка.
Это то, что я получил до сих пор:
let counter1 = ref 0;;
let rec sumthingy = fun list ->
match list with
| [] -> []
| [a] -> [a]
| hd::tl -> if List.length list > !counter1
then (counter1:=!counter1 + 1 ;
[ (sum list !counter1 ) ] @ sumthingy list)
else [];;
let total = ref 0;;
let counter = ref 0;;
let rec sum = fun list n ->
match list with
| [] -> !total
| [a] -> if !counter != n then
(counter:= !counter + 1;
total:= !total + a;
!total) else !total
| hd::tl -> if !counter != n then
(counter:= !counter + 1;
total:= !total + hd;
sum tl n) else !total;;
sum [1;2;3] 1;;
sumthingy [1;2;3];;
Функция «sum» прекрасно работает сама по себе, поэтому проблема должна быть в «sumthingy».
Ожидаемое значение для [1; 2; 3] равно [1; 3; 6], но по какой-то причине я получаю [6; 6; 6].
ПРИМЕЧАНИЕ. Я знаю индексыиз счетчиков неточны.sum [1; 2; 3] 1 должно вывести 3, но выдает 1. В данный момент для меня это не имеет большого значения, я просто хочу, чтобы это работало.