Вы должны передать их в качестве аргументов. Арифметика Пролога (is/2
) не является волшебной палочкой, ее правильный аргумент должен быть полностью создан (без переменных), прежде чем ее можно будет оценить.
Если вы хотите, чтобы предикат работал в нескольких «направлениях», с несколькими комбинациями основных терминов и переменных, вам нужно использовать логическое программирование с ограничениями, но это довольно сложная область логического программирования. В CLP для конечных доменов вы можете сказать
:- use_module(library(clpfd)). % this differs between implementations
test(X,Y,Z) :- X #= Y + Z.