重新排列LIST(升序)

时间:2013-07-09 16:20:54

标签: prolog

假设我有一个错误序列的列表。

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

E.g:

dog(bull,chiwawa,lucky).

我输入了dog(chiwawa,lucky,bull)

如何重新排列它们以成为dog(bull,chiwawa,lucky)

让它更容易比较。

1 个答案:

答案 0 :(得分:0)

排序结构参数它有点脱离Prolog'主流'编码。那是因为参数确实是占位符(与RDB中的 columns 完全相同)。

你可以通过univ(=..)/ 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列表。像狗一样 - [bull,chiwawa,lucky]。

保持元素排序,您可以使用库(ordsets),有效地实施许多强大的操作。更容易,真的......