Prolog

时间:2015-10-28 08:39:29

标签: prolog

我最近想尝试使用Prolog来理解统一过程是如何工作的,所以我编写了以下代码来从列表中返回第n个元素。

getfromarray([X|_],1,X).
getfromarray(A,N,E):-
    N > 1,
    A = [_|Y],
    N1 is N-1,
    getfromarray(Y,N1,E).

但是,输入程序的输入为
getfromarray(A,3,E),它返回: -

A = [_G5129, _G5132, E|_G5136]

据我所知,自从我编写规则A = [_|Y]以来,A被统一以满足程序中规则的条件,因此A以这种格式显示。但是,我不明白为什么E没有与数组中的值统一。我确实阅读了Prolog中统一的基础知识,我明白虽然答案没有错,但它没有按照预期的方式进行。有人可以建议我可能错过的统一主题,这可能有助于我解决这个小问题吗?

修改 当我将列表作为参数传递给程序时,它在列表中给出了相关的E值。但是,当我将变量A与列表统一并将A作为参数传递给程序时,它显示相同的输出正如我上面提到的那样。

  

5? - getfromarray([1,2,5,4,5],3,E)。

     

E = 5.

     

6? - A = [1,2,3,4,5]。

     

A = [1,2,3,4,5]。

     

7? - getfromarray(A,3,E)。

     

A = [_ G576,_G579,E | _G583]。

     

8? -

1 个答案:

答案 0 :(得分:0)

Prolog不会存储您的列表A,因此A是未实例化的。

A = [1, 2, 3, 4, 5].
getfromarray(A,3,E). 

这就像打电话:

getfromarray(A,3,E). 

试试这个:

A = [1, 2, 3, 4, 5], getfromarray(A,3,E).