首页 > 解决方案 > prolog 在两个条件下找到最小事实

问题描述

我正在从事有关 Prolog 的教育项目,但我还没有找到解决这个问题的方法。

我有一个这样的事实清单:

car(1,1,1).
car(2,2,2).
car(3,1,2).
car(4,2,3).

我要做的就是取第二个参数为最大值的事实,如果存在第二个参数相等的两个事实,则取第二个参数为最大值且第三个参数为最小值的事实。例如,在事实列表中,我会选择car(2,2,2),因为它具有第二个参数的最大值和第三个参数的最小值。

我已经尝试了很多次,但我不知道如何进行。

任何人都可以帮助我吗?

标签: prolog

解决方案


一个直接的解决方案。根据需要找到最大的第二个参数和最小的第三个参数。

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) 

推荐阅读