Пожалуйста, не делай так.is/2
предназначен для оценки арифметических выражений.
Без какого-либо контекста сложно невозможно предположить, как правильно это сделать.Традиционный способ состоит в том, чтобы иметь предикат, который выглядит следующим образом:
ten_or_three(10).
ten_or_three(3).
Вы можете делать все виды Prolog-y с таким предикатом.
?- ten_or_three(10).
true.
?- ten_or_three(4).
false.
?- length(L, 3), maplist(ten_or_three, L), sumlist(L, Sum).
L = [10, 10, 10],
Sum = 30 ;
L = [10, 10, 3],
Sum = 23 ;
L = [10, 3, 10],
Sum = 23 ;
L = [10, 3, 3],
Sum = 16 ;
L = [3, 10, 10],
Sum = 23 ;
L = [3, 10, 3],
Sum = 16 ;
L = [3, 3, 10],
Sum = 16 ;
L = [3, 3, 3],
Sum = 9.