我想编写一个程序,将列表作为输入,列表是有序返回ture,如果列表没有排序,则对列表进行排序。我编写一个程序,获取列表作为输入,如果此列表是有序的,则返回true,否则返回false(ordered(List))我也写一个程序,接收列表并对其进行排序并返回有序列表作为输出(bubblesort( List,Ordered))但我不能将它们合并在一起编写一个程序,如果列表是有序的,则返回true,否则对列表进行排序。我想了很多,但我不能。请帮我 非常感谢
答案 0 :(得分:0)
例如我想要有序([1,2,3])返回true作为输出并且有序([1,3,2])返回[1,2,3]作为输出
这在Prolog中是不可能的。 Prolog谓词与许多其他语言中的程序不同,它们可以对数据结构进行破坏性更改。在Prolog中,就像许多函数式语言一样,"排序列表"表示以(可能!)不同的顺序计算具有相同元素的 new 列表。
因此,如果你想要一个带有列表的谓词,并且可以"返回"在同一列表的排序版本中,您需要一个带有两个参数的谓词。通常的Prolog方法就是使用sort/2
谓词。即使输入"它也能很好地工作。列表已经排序(但请注意,它会删除重复的元素)。
如果你真的想编码"的逻辑,请检查有序列表;如果订购,则保持不变,否则返回已排序的版本",您可以使用现有代码执行此操作:
list_sorted(List, SortedList) :-
ordered(List),
SortedList = List.
list_sorted(List, SortedList) :-
\+ ordered(List), % the list is not already ordered
bubblesort(List, SortedList).
(我没有测试你的代码。)