我在序言中有一个带有列表的任务,在其他任何事情之前,我必须根据第二个元素对列表进行排序。
该列表是一个代码,例如,这个
[(a,[1,0]),(x,[0,0]),(d,[0,1])]
必须是 [(x,[0,0]),(d,[0,1]),(a,[1,0])]
,因为它是基于二进制代码排序的。现在我只是使用 sort/2 但它根据第一个字符对列表进行排序,例如 [(a,[1,0]),(d,[0,1]),(x,[0,0])]
这是错误的。
我对 prolog 没有经验,所以也许有一种方法可以使用 sort/2 来做到这一点,但我不知道?
我还看到另一个关于此建议的问题:
compareAvg(X, [_,A1], [_,A2]) :- compare(X, A1, A2).
then you can call
predsort(compareAvg, [[1,2],[3,1],[5,3]],X).
但我的列表大小不一,所以我不知道如何使用它。
答案 0 :(得分:2)
您可以使用 sort/4
谓词:
sort(2, @=<, Input, SortedOutput).
示例:
?- sort(2, @=<, [(a,[1,0]),(x,[0,0]),(d,[0,1])], Sorted).
Sorted = [(x, [0, 0]), (d, [0, 1]), (a, [1, 0])].
?- sort(2, @=<, [(a,[1,0,1]),(x,[0,0,1]),(d,[0,1,0])], Sorted).
Sorted = [(x, [0, 0, 1]), (d, [0, 1, 0]), (a, [1, 0, 1])].
答案 1 :(得分:0)
你可以试试
compareAvg(X, [_,A1 | _], [_,A2 | _]) :- compare(X, A1, A2).