Нет проблем с clpfd !
?- use_module(library(clpfd)).
true.
?- length(Zs, 5), Zs ins 1..3, labeling([], Zs).
Zs = [1, 1, 1, 1, 1]
; Zs = [1, 1, 1, 1, 2]
; Zs = [1, 1, 1, 1, 3]
; Zs = [1, 1, 1, 2, 1]
; Zs = [1, 1, 1, 2, 2]
; Zs = [1, 1, 1, 2, 3]
; Zs = [1, 1, 1, 3, 1]
; Zs = [1, 1, 1, 3, 2]
; Zs = [1, 1, 1, 3, 3]
; Zs = [1, 1, 2, 1, 1]
...