2

我是 Prolog 的新手,正在尝试为分配的严格递减序列编写程序。

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

这是我到目前为止所拥有的:

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

它给了我一个错误,说明本地堆栈之外。似乎无法解决这个问题。

4

1 回答 1

4

当您在 Prolog 中使用此列表结构时

[H | T]

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

你需要做这样的事情:

isOrdered([]).
isOrdered([_]).
isOrdered([A,B|T]) :- A > B, isOrdered([B|T]). 
于 2013-02-16T02:10:04.963 回答