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

#prolog

#пролог

Вопрос:

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

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

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

Я не знаю, как это реализовать?

большое спасибо 🙂

Ответ №1:

Например, используя in оператор в Swi-prolog, я могу сделать вот так:

 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.
  

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