2013-07-09 131 views
0

假設我有一個不正確順序的列表。重新排列LIST(升序)

如何以升序重新排列列表?

E.g:

dog(bull,chiwawa,lucky). 

而且我喜歡輸入dog(chiwawa,lucky,bull)

我該如何重新排列它們變成dog(bull,chiwawa,lucky)

只是讓它更容易比較。

+0

這些變量或單字母原子?如果他們是原子,難道你不能把它們分類嗎?如果它們是變量,它們的定單又是如何定義的? – 2013-07-10 10:23:54

+0

我已經修改了這個例子給你。 假設我已經定義了一個包含很多原子的謂詞。 –

回答

0

排序結構參數它有點超出了Prolog的「主流」編碼。這是因爲參數實際上是佔位符(與RDB中的完全一樣)。

您可以通過大學來辦(=..)/ 2和msort/2

?- Unsorted = dog(chiwawa,lucky,bull), Unsorted =.. [Functor|UnsortedArgs], msort(UnsortedArgs, Args), Sorted =.. [Functor|Args]. 

產量

當然
Unsorted = dog(chiwawa, lucky, bull), 
Functor = dog, 
UnsortedArgs = [chiwawa, lucky, bull], 
Args = [bull, chiwawa, lucky], 
Sorted = dog(bull, chiwawa, lucky). 

,你可能應該進行切換代表性清單,或將有很難與您的程序的其餘部分。如果您嘗試表示某種基本分類,則可以使用庫(pairs),並使用Key-Elements的列表。像狗一樣 - [公牛,chiwawa,幸運]。

保持元素排序,您可以使用庫(ordsets),並且可以高效地執行許多強大的操作。更容易,真的...