пролог найти все имена, которые встречаются в фактах три раза - PullRequest
0 голосов
/ 11 июля 2020

предположим, что у нас есть факты в прологе:

likes(a,games).
likes(a,books).
likes(a,sports).

likes(b,sleep).
likes(b,play).
likes(b,abc).

likes(c,eat).

likes(d,run).
likes(d,play).

как мне определить предикат (three_things / 1), который распознает, каким двум людям нравятся три вещи? поэтому для этого примера я хочу, чтобы выходные данные по запросу three_things (X) были

?- three things(X).
X=a;
X=b.

1 Ответ

2 голосов
/ 11 июля 2020

Вы можете использовать bagof / 3 , связывая третий аргумент со списком из 3 элементов

three_things(X):-
  bagof(1, Activity^likes(X, Activity), [_,_,_]).

Если вы хотите учитывать только отдельные действия для каждого человека, тогда вам следует используйте вместо него setof / 3 :

three_things(X):-
  setof(Activity, Activity^likes(X, Activity), [_,_,_]).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...