0

Я хочу получить сумму значений функции f (i), когда i равно от a до b = f (a) + f (a + 1) + ... + f (b-1) + f (b) Итак, я написал такой код.Есть ли бесконечный цикл в моих кодах? in ocaml

let rec sigma : (int -> int) -> int -> int -> int 
= fun f a b -> 
if a=b then f a 
else f b + sigma f a b-1 ;; 

но результат в том, что во время оценки происходит переполнение стека. Есть ли бесконечный цикл? и почему?

ответ

2

sigma f a b-1 разобран как (sigma f a b) - 1 вместо вашего намерения, sigma f a (b-1). С sigma f a b звонит sigma f a b рекурсивно в ваш код, он никогда не останавливается.

Лучшая практика заключается в том, чтобы помещать пробелы вокруг двоичных операторов, таких как sigma f a b - 1, чтобы вы не ошибались, что вы пишете.

+4

BTW мы получили тот же вопрос 4 раз уже на этой неделе. Мы должны предупредить учителей или ТП курса. Это OCaml MOOC? – camlspotter

+0

Отличная точка. –

+0

Спасибо за добрый ответ и очень жаль, что не смогли найти вопросы. и это не MOOC. – Volnyar