При обращении к этому коду вы должны увидеть 2 одиночных предупреждения: SumaI
и SumI
появляются только один раз в теле второго пункта процедуры summation/3
.
Глядя на ваш код, кажется, что вы хотел использовать ту же переменную, поэтому переименуйте SumaI в SumI. Теперь вы не должны видеть одноэлементных предупреждений после повторного анализа кода.
[редактировать после уточнения]
После редактирования у вас все еще остаются одноэлементные предупреждения. Помимо опечаток, проблема заключается в том, что ваша условная ветвь назначает одну из переменных суммы, а другую оставляет как есть. Я считаю, что вы хотите что-то вроде этого:
suma(0,0,0).
suma(N,SumaPares,SumaImpares) :-
N>0,
N1 is N -1,
suma(N1,SumaP,SumaI),
( 0 is mod(N,2) ->
(SumaPares is SumaP + (N-2), SumaImpares=SumaI)
; (SumaImpares is SumaI +(N-2), SumaPares=SumaP)
).