At some point, you need a predicate somewhere to actually list all the constraints you wish to apply. You could do something like this:
result(X) :-
constraints(X, [something, something1, something2]).
constraints(X, [H|T]) :-
constraint(X, H),
constraints(X, T).
constraints(_, []).
This mechanism allows you to generate the constraints dynamically as a list, if desired. You could also have the list of constraints be a fact:
constraint_list(a, [something, something1, something2]).
And then use that in the result
predicate:
result(X) :-
constraint_list(X, List),
constraints(X, List).