我最近想要用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作爲參數傳遞給程序時,它給出了與上面相同的輸出。 –