Проблема со строкой S is S + R.
.В прологе одна переменная не может принимать разные значения в теле предложения.Здесь вы ожидаете, что значение S
изменится, но это не может работать (за исключением случаев, когда R
равно 0, и в этом случае S
остается тем же самым; следовательно, почему оно уже работает для списков с одним элементом).
Вам нужно использовать другую переменную для хранения промежуточного результата и использовать только выходную переменную для конечного результата.Например:
mult([], _, 0).
mult([X|Xs], A, S):-
mult(Xs, A, R),
Tmp is (X * A),
S is Tmp + R.
Я также позволил себе исправить предупреждение об одноэлементной переменной, которое вы получили.Хотя в этом случае это было безвредно, вы никогда не должны игнорировать их, поскольку они часто указывают на некорректную логику.