【发布时间】:2018-04-25 20:19:23
【问题描述】:
我得到了以下谓词:
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。
我正在为我的期末做练习题,所以你们不帮忙做作业!哈哈
【问题讨论】:
-
不,问题是
H < T。 -
为了澄清@TomasBy 的评论,您将列表的头部与列表的其余部分进行比较。您可能想一次撕下两个项目并比较它们,然后在列表的尾部重复出现。
-
简单的
ordered([_]):- !.ordered([A,B|T]):- A < B, ordered([B|T]). -
我同意,我做错了,但你不能修改左侧。您不能将有序 ([A|T]) 更改为有序 ([A,B|T])。还有其他方法吗?
标签: list prolog unification