我最近想尝试使用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? -
答案 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).