Я пытаюсь понять эту сумму предикатаПредикат суммы пролога, когда задана временная переменная?
sum([], 0).
sum([H|T], Sum) :-
sum(T, Temp),
Sum is Temp + H.
это работает, однако я не понимаю, почему. Из моего понимания с помощью запроса, такого как sum ([1,2,3], Sum), он будет совпадать со вторым предложением, создающим экземпляр H, как 1 и T как [2,3], а Sum все равно Sum. Затем он попытается снова выполнить первую сумму вызова цели, но во второй цели, где Sum является Temp + H, когда Temp задает значение?
О, ладно, я забыл об использовании трассирующих ура, я думал, что каждый раз, когда Temp будет установлен на 0, но я предполагаю, что temp не равен 0, это приведет к сбою первого предиката? – Elliot678
Первый предикат выполняется только тогда, когда 'T' является' [] '. – Barmar
@Barmar: вы имеете в виду первое предложение, есть только один предикат. –