Из вашего сообщения об ошибке я делаю вывод, что вы используете ECLiPSe, так что вы можете обратиться к документации ECLiPSe , а не к SWI-Prolog;)
Большинство реализаций решателя ограничений в конечных доменахограничьте себя целочисленными доменами, поэтому вам придется кодировать имена людей как целые числа.Однако ECLiPSe предоставляет минималистский решатель для символических доменов , который вы можете использовать для своих первых экспериментов:
:- lib(sd). % load symbolic finite-domain solver
people([tom,betty,sue,fred,charles,chay]).
setup(GroupCount, Group) :-
length(Group, GroupCount),
people(X),
Group &:: X,
alldifferent(Group),
labeling(Group).
, который работает следующим образом
?- setup(3, G).
G = [betty, charles, chay]
Yes (0.00s cpu, solution 1, maybe more)
G = [betty, charles, fred]
Yes (0.00s cpu, solution 2, maybe more)
...
ДляДля дальнейшей работы вы, вероятно, захотите переключиться на библиотеку (ic) , которая работает с целочисленными / действительными доменами (вместо символов), но более многофункциональна.