Prolog,按参数排序事实

时间:2016-12-12 21:38:24

标签: sorting prolog

我一直试图找到如何做到这一点,我试图对以下事实进行排序: 包(X,Y,N),其中N是数字。我想创建一个包含X值的列表,按N的值(从最低到最高)排序。 尝试使用:

gera_caminho_tempo(,L): - findall(包(N,,S),包(,S),包),msort(包,L)

但没有结果,任何想法?

1 个答案:

答案 0 :(得分:3)

对于此类任务,请查看标准谓词keysort/2

在您的情况下,您可以创建N-package(X,Y,N)形式的,例如:

?- findall(N-package(X,Y,N), package(X,Y,N), Pairs0).

获得Pairs0后,您可以使用keysort/2获取按键排序的,其中每对的第一个组件作为其键:

?- findall(N-package(X,Y,N), package(X,Y,N), Pairs0),
   keysort(Pairs0, Pairs).

我将这些已排序的对关联到已排序的包作为一个简单的练习。