我如何 return Prolog 中的特定列表?
How do I return a specific list in Prolog?
我写了一个小的 Prolog 程序,它应该检查一个列表并查看头部 Ha
是否大于 K
,如果是,它应该将它附加到一个列出 R
并在检查整个列表后返回 R
,其中包含大于 K
的整数。
此代码returnsR = []
.
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).
有什么帮助吗?
你应该写出你想如何用一些样本数据调用这个谓词,以及你期望从中得到什么。这个很重要。 :)
好的,我来做:teilliste_grK([1,4,2,5,3,6],3,X)
应该成功,将 X
实例化为 [4,5,6]
,对吗?现在试试看它匹配的是哪个子句。
所以它与第二个匹配,1
确实是 =< 3
,最后一行说,继续没有头元素(比给定的 K
小), 无论我们从那里得到什么 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
应该是什么?
我写了一个小的 Prolog 程序,它应该检查一个列表并查看头部 Ha
是否大于 K
,如果是,它应该将它附加到一个列出 R
并在检查整个列表后返回 R
,其中包含大于 K
的整数。
此代码returnsR = []
.
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).
有什么帮助吗?
你应该写出你想如何用一些样本数据调用这个谓词,以及你期望从中得到什么。这个很重要。 :)
好的,我来做:teilliste_grK([1,4,2,5,3,6],3,X)
应该成功,将 X
实例化为 [4,5,6]
,对吗?现在试试看它匹配的是哪个子句。
所以它与第二个匹配,1
确实是 =< 3
,最后一行说,继续没有头元素(比给定的 K
小), 无论我们从那里得到什么 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
应该是什么?