Prolog 重新排列列表(升序)

Prolog 重新排列列表(升序),prolog,Prolog,假设我有一个顺序不正确的列表 如何按升序重新排列列表 例如: 我输入了像狗(chiwawa,lucky,bull) 我如何将它们重新排列成狗(公牛、千瓦瓦、幸运) 只是为了便于比较。对结构参数进行排序它有点脱离了Prolog的“主流”编码。这是因为参数实际上是占位符(与RDB中的列完全相同) 你可以通过univ()/2和/2来完成 屈服 Unsorted = dog(chiwawa, lucky, bull), Functor = dog, UnsortedArgs = [chiwawa, lu

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

如何按升序重新排列列表

例如:

我输入了像狗(chiwawa,lucky,bull)

我如何将它们重新排列成
狗(公牛、千瓦瓦、幸运)


只是为了便于比较。

对结构参数进行排序它有点脱离了Prolog的“主流”编码。这是因为参数实际上是占位符(与RDB中的列完全相同)

你可以通过univ()/2和/2来完成

屈服

Unsorted = dog(chiwawa, lucky, bull),
Functor = dog,
UnsortedArgs = [chiwawa, lucky, bull],
Args = [bull, chiwawa, lucky],
Sorted = dog(bull, chiwawa, lucky).
当然,您可能应该将表示转换为列表,否则将很难处理程序的其余部分。如果您试图表示某种基本分类,可以使用library(),并使用
关键元素的列表。像狗一样的东西-[公牛,千瓦瓦,幸运]


通过对元素进行排序,可以使用library(),高效地执行许多功能强大的操作。更容易,真的

这些是变量还是一个字母的原子?如果它们是原子,你就不能把它们分类吗?如果它们是变量,它们的顺序是如何定义的?我已经修改了这个例子。假设我已经定义了一个包含很多原子的谓词。
?- 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).