编写一个谓词,用于确定列表是否按升序排列

时间:2018-04-25 20:19:23

标签: list prolog unification

我给出了以下谓词:

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统一。它永远不会到达第三个定义的[err] /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: 1: /home/vcap/app/wlp/usr/servers/projectname/resources/chromedriver: Syntax error: Unterminated quoted string

我为我的决赛做练习问题,所以你们不帮助做作业!洛尔

1 个答案:

答案 0 :(得分:1)

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

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