$args = array(
'post_type' => 'post',
'relation' => 'OR',
array(
'post__in' => $post_array,
),
array(
'category__in' => $category_array,
),
);
我的查询是:谁住在同一个城市?我写了一条规则,知道它不适用于该查询,但无法为该查询制定任何准确的规则。
答案 0 :(得分:1)
我给你一个开始的过程。
由于您可能对“居住在同一城市中的所有名称”有多种解决方案(因为对于多个城市来说可能都是这样),所以我建议编写以下形式的谓词:
same_city(City, NameList).
现在,您可以集中精力编写谓词,因为参数由单个City组成,并将提供一个或多个名称的列表:
same_city(City, NameList) :-
findall(Name, workers(...), NameList)).
我将留给您填写...
。
现在,这将为您提供在给定城市中甚至只有一个名字的解决方案。如果只希望对至少两个名称的城市成功,则需要指定该条件:
at_least_two_same_city(City, NameList) :-
findall(Name, workers(...), NameList)),
length(NameList, NumberOfNames),
NumberOfNames > 1.
确保长度大于1的列表的另一种方法是将[_,_|_]
的形式用于列表,这使方法更整洁:
at_least_two_same_city(City, NameList) :-
NameList = [_,_|_], % We only want lists with at least 2 members
findall(Name, workers(...), NameList)).
最后,如果您想要该谓词的所有解决方案,则可以在该谓词上再次使用findall/3
:
findall(City-NameList, at_least_two_same_city(City, NameList), AllMultipleNameCitiesAndNames).