ПРОЛОГ все разные - PullRequest
7 голосов
/ 21 марта 2010

У меня очень странная проблема с PROLOG.Я использовал это раньше, но это было некоторое время, и я ржавый.У меня есть список переменных, и мне нужно убедиться, что ни одна из них не одинакова.

Я пробовал:

use_module(library(bounds)). all_different(A, B, C, D, 6, 8).

Однако, когда я пытаюсь, Я получаю сообщение о том, что all_different / 6 не определено.

Как я могу решить эту проблему?Есть ли какая-нибудь библиотечная функция, которую я могу вызвать напрямую для этого?

Я ОЧЕНЬ застрял и был бы очень признателен за любую помощь.

Заранее спасибо.

Ответы [ 3 ]

9 голосов
/ 21 марта 2010
all_different([A,B,C,D,6,8]).

Я считаю, что в all_different может быть передан только список.

2 голосов
/ 22 марта 2010

Полагаю, что> / 2 и </ 2 могут ничего не знать об атрибутах, которые all_different / 1 применил к переменным в списке. В SWI-Prolog этот предикат предоставляется библиотекой (clpfd), и среди других предикатов в этой библиотеке есть # </ 2. </p>

        ?- all_different([X,Y]), 0 #< X, X #< 3, 1 #< Y, Y #< 4, indomain(X), indomain(Y). 
        X = 1,
        Y = 2 ;
        X = 1,
        Y = 3 ;
        X = 2,
        Y = 3.

P.S. indomain / 1 из той же библиотеки возвращает все возможные значения в рамках примененных ограничений.

1 голос
/ 26 марта 2010

Библиотека ограничений ic в Eclipse Prolog предоставляет предикат alldifferent / 1, который принимает список переменных в качестве аргумента, например, alldifferent([X,Y]), и вычисляет то, что вы ищете.

...