2015-10-28 55 views
0

我最近想要用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 -

+0

Ë** **被統一爲所述陣列中的 '值':共享,無關的變量,創建遞歸到1 ... – CapelliC

+0

你好,感謝您的反饋!我嘗試將一個列表作爲參數傳遞給程序,並將E的相關值賦予列表中的元素。但是,當我將變量A統一到列表中,然後將A作爲參數傳遞給程序時,它給出了與上面相同的輸出。 –

回答

0

序言不存儲您的清單,因此A是uninstantiate。

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

這就像只調用:

getfromarray(A,3,E). 

嘗試在此代替:

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

你好,感謝您的反饋!當我按照你所建議的方式傳遞參數時,程序工作正常。我不知道prolog在統一時不存儲變量的列表。 –

+0

不客氣:) – Nickelium