Как динамически установить домен для списка

например, я создаю список после

length(List,5),
List :: 1..5,

Я хочу установить второй элемент списка, он выглядит как List[1] :: 1..2 %List, от 0 до 4

Я не знаю, как это понять?

Спасибо большое :)


person funlive    schedule 12.04.2011    source источник


Ответы (1)


Например, используя оператор 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.

Я предполагаю, что вы можете делать подобные вещи с оператором :: в других вариантах Пролога.

person pad    schedule 12.04.2011