Похоже, проблема в том, что вы используете одну и ту же переменную (Thrs
) дважды для разных вещей.Однако это трудно сказать, поскольку вы также использовали разные заглавные буквы в разных местах.Измените строку findall
таким образом, чтобы начальная переменная имела одинаковую прописную букву в вызове lectureSegmentHrs
.Затем полностью используйте другую переменную, чтобы получить окончательное выходное значение (то есть значение, которое появляется в sumList
и в слоте возврата всего предиката).
Вам необходимо использовать другую переменную, потому что Prolog неподдержка переназначения переменных.На логическом языке понятие переназначения переменной по своей сути невозможно.Что-то вроде следующего может показаться разумным ...
...
X = 10,
X = 11,
...
Но вы должны помнить, что ,
в Прологе является оператором соединения.Вы фактически говорите Prolog найти решение вашей проблемы, где X равно 10 и 11 одновременно .Так что, очевидно, он скажет вам, что это не может быть сделано.
Вместо этого вы должны просто создавать новые имена переменных по мере продвижения.Иногда это немного раздражает, но это просто связано с территорией логических языков.