如何在Prolog中调用列表列表例如我有这个列表:
list([[1,2,3],[4,5],[6,7]]).
我想在element_at函数中调用我的列表:
element_at(X,[X|_],1).
element_at(X,[_|L],K) :-
element_at(X,L,K1),
K is K1 + 1.
当我打电话
element_at(X,list,2)
我没有结果。
答案 0 :(得分:2)
我没有结果。
嗯,你做有结果:失败。但是你期待成功。这是一个非常通用的方法,您可以自己在Prolog中找到这样的错误:
如果您遇到意外失败,只需概括您的计划。
在您的特定情况下,element_at(X,list,2)
失败。也许它应该3
代替2
?或者是另一个号码?在Prolog中有一种简单的猜测方式:只需用变量替换3
即可!出于同样的原因,您可以删除定义中的目标。我将使用*
标记这些内容。
以下是您的程序的概括仍然失败 - 因此其余部分必定存在错误:
:- op(950, fy, *). *(_). ?- element_at(X, list, _/*2*/). element_at(X,[_/*X*/|_],_/*1*/). element_at(X,[_|L],K) :- *element_at(X,L,K1), *K is K1 + 1.
答案 1 :(得分:0)
我们通过调用谓词
从我们的知识库中检索一个值list(L)
所以提示符处的整个查询是
list(L), element_at(X, L, 2).
或者在源文件中定义
my_query(X) :- list(L), element_at(X, L, 2).