我一直试图找到如何做到这一点,我试图对以下事实进行排序: 包(X,Y,N),其中N是数字。我想创建一个包含X值的列表,按N的值(从最低到最高)排序。 尝试使用:
gera_caminho_tempo(,L): - findall(包(N,,S),包(,,S),包),msort(包,L)
但没有结果,任何想法?
答案 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).
我将这些已排序的对关联到仅已排序的包作为一个简单的练习。