Use clpfd !
<Preview>: use_module ( library (clpfd) ).To calculate the sum of a list of integers, simply use the <library predicate i0>
sum/3 :
< > ? -
([1,2,3,4], # =, S). % Q: 1 + 2 + 3 + 4?
S = 10.% A: 10
? - sum ([1,2,3,4], # =, 10). % Q: 1 + 2 + 3 + 4 10?
. % A: ,
? - sum ([1,2,3,4], # =, 11). % Q: 1 + 2 + 3 + 4 11?
. % A: ,
, clpfd (is)/2, @CapelliC:
< > ? - [A, B, C]
ins 1.sup,
sum ([A, B, C, A], # =, 12),
([], [A, B, ]). A = B, B = 1, C = 9
; A = 1, B = 2, C = 8
; A = 1, B = 3, C = 7
; A = 1, B = 4, C = 6
; A = 1, B = C, C = 5
; A = 1, B = 6, C = 4
; A = 1, B = 7, C = 3
; A = 1, B = 8, C = 2
; A = C, B = 9, C = 1
; A = 2, B = 1, C = 7
; A = B, B = 2, C = 6
; A = 2, B = 3, C = 5
; A = 2, B = C, C = 4
; A = 2, B = 5, C = 3
; A = C, B = 6, C = 2
; A = 2, B = 7, C = 1
; A = 3, B = 1, C = 5
; A = 3, B = 2, C = 4
; A = B, B = C, C = 3
; A = 3, B = 4, C = 2
; A = 3, B = 5, C = 1
; A = 4, B = 1, C = 3
; A = 4, B = C, C = 2
; A = 4, B = 3, C = 1
; A = 5, B = C, C = 1.