Prolog 中的输出问题

Issue with output in Prolog

我最近想用 Prolog 进行实验以了解统一过程的工作原理,所以我将以下代码写入 return 列表中的第 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),它 returns :-

A = [_G5129, _G5132, E|_G5136]

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

编辑: 当我将列表作为参数传递给程序时,它给出了list.However中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 ?-

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