如何按降序对原子进行排序并将其打印出来

时间:2016-07-03 15:15:17

标签: sorting prolog

%travelto(Traveller, Travelling_to, Distance, Cost)
travelto(nella,ryan,120,35).
travelto(jamie,lyla,50,10).
travelto(tyran,john,55,25).
travelto(maria,karolina,350,55).
travelto(leo,anna,250,20).
travelto(lyla,josh,300,45).
travelto(martin,john,250,55).
travelto(leo,najma,100,20).
travelto(diana,kyle,230,15).
travelto(michael,lucy,90,15).
travelto(sam,kate,300,40).
travelto(jason,cindy,170,26).
travelto(julia,nayma,110,10).

sortList(Traveller):-
   findall(Traveller-Cost,travelto(Traveller,_,_,Cost),List),
   keysort(List,Answer),
   print([Answer]),
   fail.

上述信息是我数据库中的事实的一部分。我想创建一个规则,允许用户输入原子列表(旅行者名称)并按成本返回名称的降序列表。我从swi-prolog阅读了一些文档,并尝试搜索stackoverflow。我创建的规则在上面,我猜这是错误的。我尝试了很多阅读,但仍然无法弄明白我应该做些什么。有人可以帮助我解决我现在面临的问题吗?

下面是我想要输入的查询示例以及我想要获得的返回示例。

?-sortList([martin,jamie,diana,tyran,nella]). %query I want to type in
[martin,nella,tyran,diana,jamie] %return I am expecting

1 个答案:

答案 0 :(得分:1)

keysort/2按键排序。在你的对Traveller-Cost中,旅行者是关键。如果你想按成本键入,你的对必须倒置。

排序后,您可以使用pair_values/2从对中提取值(旅行者)。

查看图书馆pairs了解更多信息。