Prolog检查列表是否严格按顺序递减

时间:2013-02-16 01:49:38

标签: prolog

我是Prolog的新手,正在尝试编写一个程序,用于严格降低分配顺序。

现在定义一个谓词isOrdered,如果列表中的项Lst严格按顺序递减,则'isOrdered(Lst)'成功。您可以假设Lst仅包含数字。例如 ? - isOrdered([11,5,3,0])。 真。

这是我到目前为止所做的:

isOrdered([]).
isOrdered([A|B]) :- isOrdered([B]), A > B. 

它给了我一个错误,说明了本地堆栈。似乎无法绕过这个。

1 个答案:

答案 0 :(得分:4)

在Prolog中使用此列表构造

[H | T]

您将列表分为头部和尾部。头部是单个项目(如果原始列表是列表列表,则可以是列表),尾部是删除了初始元素的原始列表。这就是A > B不正确的原因。

你需要做这样的事情:

isOrdered([]).
isOrdered([_]).
isOrdered([A,B|T]) :- A > B, isOrdered([B|T]).