如何调用prolog

时间:2017-12-10 17:23:33

标签: prolog

如何在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)

我没有结果。

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).