2016-07-03 8 views
0
%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

keysort/2キーで並べ替えます。あなたのペアでは、Traveller-Cost、旅行者が鍵です。あなたがコストでキーを打ちたいなら、あなたのペアは逆転しなければなりません。

ソート後、pair_values/2を使用してペアから値(旅行者)を抽出することができます。

ライブラリpairsをご覧ください。

関連する問題