0

假设我有一个序列不正确的列表。

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

例如:

dog(bull,chiwawa,lucky).

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

我怎样才能重新排列它们成为dog(bull,chiwawa,lucky)

只是让它更容易比较。

4

1 回答 1

0

排序结构参数有点脱离 Prolog 的“主流”编码。这是因为参数实际上是占位符(就像RDB 中的列一样)。

您可以通过 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).

当然,您可能应该将表示转换为列表,否则将很难处理程序的其余部分。如果您试图表示某种基本分类,您可以使用 library( pairs ),并使用Key-Elements. 像狗一样的东西-[公牛,chiwawa,幸运]。

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

于 2013-07-13T10:38:37.873 回答