假设我有一个错误序列的列表。
如何按升序重新排列列表?
E.g:
dog(bull,chiwawa,lucky).
我输入了dog(chiwawa,lucky,bull)
。
如何重新排列它们以成为dog(bull,chiwawa,lucky)
?
让它更容易比较。
答案 0 :(得分:0)
排序结构参数它有点脱离Prolog'主流'编码。那是因为参数确实是占位符(与RDB中的 columns 完全相同)。
来做?- 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),有效地实施许多强大的操作。更容易,真的......