%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
答案 0 :(得分:1)
keysort/2
按键排序。在你的对Traveller-Cost
中,旅行者是关键。如果你想按成本键入,你的对必须倒置。
排序后,您可以使用pair_values/2
从对中提取值(旅行者)。
查看图书馆pairs了解更多信息。