Например, используя оператор in
в Swi-прологе, я могу сделать так:
init_static(List) :- length(List, 5), List in 1..5, List = [_,Y|_], Y in 1..2.
, если я заранее знаю, что мне нужны определенные ограничения для второго элемента.
Обобщение для любого индекса:
init_dynamic(I, List) :- length(List, 5), List in 1..5, length(L1, I), Y in 1..2, append(L1, [Y|_], List).
Итак, запрос для второго элемента:
init_dynamic(1, [1,2,4,3,5]).
true.
Я предполагаю, что вы можете делать подобные вещи с оператором ::
в других прологах.варианты.