假设我有一个序列不正确的列表。
如何按升序重新排列列表?
例如:
dog(bull,chiwawa,lucky).
我输入了dog(chiwawa,lucky,bull)
.
我怎样才能重新排列它们成为dog(bull,chiwawa,lucky)
?
只是让它更容易比较。
假设我有一个序列不正确的列表。
如何按升序重新排列列表?
例如:
dog(bull,chiwawa,lucky).
我输入了dog(chiwawa,lucky,bull)
.
我怎样才能重新排列它们成为dog(bull,chiwawa,lucky)
?
只是让它更容易比较。
排序结构参数有点脱离 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),高效实现许多强大的操作。容易多了,真的...