prolog - prolog 在两个条件下找到最小事实
问题描述
我正在从事有关 Prolog 的教育项目,但我还没有找到解决这个问题的方法。
我有一个这样的事实清单:
car(1,1,1).
car(2,2,2).
car(3,1,2).
car(4,2,3).
我要做的就是取第二个参数为最大值的事实,如果存在第二个参数相等的两个事实,则取第二个参数为最大值且第三个参数为最小值的事实。例如,在事实列表中,我会选择car(2,2,2)
,因为它具有第二个参数的最大值和第三个参数的最小值。
我已经尝试了很多次,但我不知道如何进行。
任何人都可以帮助我吗?
解决方案
一个直接的解决方案。根据需要找到最大的第二个参数和最小的第三个参数。
req(car(A, B, C)) :-
findall(X, car(_, X, _), Xs),
max_list(Xs, B),
findall(Y, car(_, B, Y), Ys),
min_list(Ys, C),
car(A, B, C).
?- req(Car).
Car = car(2, 2, 2)