首页 > 解决方案 > 编写一个判断列表是否按升序排列的谓词

问题描述

我得到以下谓词:

q8([]):-
q8([X]):-
q8([H|T]):-

需要提供以下输出

q8([2, 5, 8, 8, 8, 9]).
true.
q8([8, 5, 2, 8, 9]).
false.

我的尝试是:

q8([]):-true.
q8([X]):-true.
q8([H|T]):- H<T, q8(T).

然而这失败了,因为它试图将tail我的列表统一到q8([X])只允许一个元素。我不太确定如何解决这个问题。

为了更清楚,如果你运行q8([2,5,8,8,8,9]). 我收到一个错误,因为[5,8,8,8,9]无法与X. 它永远不会到达第三个定义的q8 predicate

我正在为我的期末做练习题,所以你们不帮忙做作业!哈哈

标签: listprologunification

解决方案


q8([]):-true.
q8([_X]):-true.
q8([H1,H2|T]):- H1=<H2, q8([H2|T]).

对于第三个子句,您需要查看列表中的前两个元素,然后您需要使用小于或等于,最后您需要递归保留您取出的第二个元素。


推荐阅读