Отказ от ответственности: я немного глуп, когда дело доходит до пролога.Кроме того, сейчас у меня нет доступа к интерпретатору пролога.
Канонический пример, сумма списка:
sum([], 0).
sum([Head | Tail], Total) :- sum(Tail, Temp), Total is Head + Temp.
создание списка с помощью findall / 3:
findall(Val, producte(_, Val, _), Vals).
У Вальса есть ваш список, который вы хотите суммировать.
Обновление: согласно вашему комментарию, я немного не в себе без доступа к переводчику.
calculate(I) :- sum(Vals, I), findall(Val, producte(_, Val, _), Vals).
Что я думаю, что это делает:
использует вашу единственную цель I
, которая получает результат суммирования вашего списка Vals, который генерируется findall.Но прошло так много времени с тех пор, как я использовал пролог, поэтому у меня может даже не быть синтаксиса для выполнения того, что я хочу.Тем не менее, небольшое изменение должно достичь того, что вы хотите с одной целью.