我最近想要用Prolog来试验一下统一过程是如何工作的,所以我编写了下面的代码来返回列表中的第n个元素。在Prolog中输出问题
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中的统一基础知识,并且我明白,虽然答案没有错,但它并没有按照它的意图去做。有人可以提出一个统一的话题,我可能错过了哪些可以帮助我解决这个小问题?
编辑: 当我通过列表作为参数传递给程序,它给了电子商务在list.However,相关的价值时,我一个统一的变量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 ... – CapelliC
你好,感谢您的反馈!我尝试将一个列表作为参数传递给程序,并将E的相关值赋予列表中的元素。但是,当我将变量A统一到列表中,然后将A作为参数传递给程序时,它给出了与上面相同的输出。 –