我已经编写了一个小型的Prolog程序,该程序应该检查一个列表并查看头部Ha
是否大于K
,如果是,它应该是将其附加到列表R
,并在检查完整个列表后返回R
,然后将包含大于K
整数的内容。
此代码返回R = []
。
teilliste_grK([],_,_).
teilliste_grK([Ha|Ta], K, R) :-
Ha =< K,
teilliste_grK(Ta,K,R).
teilliste_grK([Ha|Ta], K, R) :-
Ha > K,
append(R, [Ha], C),
teilliste_grK(Ta, K, C).
任何帮助?
答案 0 :(得分:1)
你应该写出你如何用一些样本数据来调用这个谓词,以及你期望从中获取什么样的数据。这个很重要。 :)
好的,我会这样做:teilliste_grK([1,4,2,5,3,6],3,X)
应该成功,将X
实例化为[4,5,6]
,对吗?现在尝试查看它与哪些条款匹配。
所以它匹配第二个,1
确实是=< 3
,最后一行说,继续没有head元素(小于给定的K
),并且< em>我们从那里得到R
,我们的R
以及 - R
毕竟是R
。
好。那么当我们接下来4
时,会发生什么?第二个子句匹配,但随后被4 =< 2
拒绝。好。关于第三个条款。
它再次匹配,并且不等式成立,但是你做了一些奇怪的事情。您首先要说C
是一个比R
更长的元素,而C
来自更短的列表 - 您的尾Ta
输入。无论你在最后一个条款(第一个)中设置了R
,这都不可能。
您希望C
短于R
,这是从刚刚通过测试的同一个头Ha
开始,因此需要将参数放入不同的顺序:
append([Ha], C, R),
(你可以写这个更短更简单,不需要调用append
- 它是什么?)。
那么最终(第3个,即[]
)条款呢?如果您致电teilliste_grK([],3,X)
,X
应该是什么?