Как предотвратить объединение в прологе - PullRequest
0 голосов
/ 02 мая 2020

У меня есть предикат, который генерирует такие подсписки, как:

?- f([1,2,3,#,5,6,7,8,#,10,11,12],L).

L = [1,2,3];

L=[5,6,7,8];

L=[10,11,12];

false.

Когда я вызываю его с переменными, а не с константами, они объединяются с #, разрушая выходные данные и мешая их объединению позже. Как я могу остановить объединение переменных с # таким образом?

1 Ответ

0 голосов
/ 02 мая 2020

остановить объединение переменных с помощью #

. Этот общий метод доступен, только если ваш Prolog поддерживает dif / 2 (SWI-Prolog поддерживает).

?- f(..., L), maplist(dif(#), L).

Конечно, в вашем коде может быть лучшее место для размещения вызовов dif / 2, или вы можете использовать стандартный оператор ISO (\ ==) / 2, чтобы избежать объединения в первую очередь. Реальна ли такая стратегия, зависит от вашего кода. Обычно ограничения работают лучше - с точки зрения эффективности - когда мы даем им возможность ограничить пространство поиска как можно скорее .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...