2011-11-21 27 views
4

遞增的數字我想實現序言增量,並寫了下面的代碼:在序言

coordenate(X,Y,Z):- 
      X is 1, 
      Y is 1, 
      Z is 1, 
      coordenate(X1,Y1,Z1), 
      X1 is X+1, 
      Y1 is Y+1, 
      Z1 is Z. 

而且我想:

coordenate(X,Y,Z):- 
      X is 1, 
      Y is 1, 
      Z is 1, 
      coordenate(X+1,Y+1,X+1). 

無論這些工作。誰能解釋爲什麼?

+8

拼寫的座標。 – Gabe

+1

請用「不要工作」更具描述性。它不是編譯,給出錯誤的結果,進入一個無限循環,吃你的小貓?我們不是一個閱讀編譯器的頭腦,我們也不知道協調謂詞應該做什麼 – hugomg

+0

你的代碼的目的是什麼?現在它會遇到無限遞歸。給我們一個更廣泛的背景,以便我們可以理解您的問題 – Novakov

回答

9

這兩個程序都不起作用,因爲它們包含無限遞歸。您在本身內部呼叫coordenate,沒有停止條件。

然後,爲了幫助您解決原始增量變量的問題:在Prolog中不能這樣做。一旦變量被綁定,你就不能改變它的綁定。在Prolog編程時,你必須考慮relations和遞歸,而不是可變狀態。以下是如何在序言增加:

incr(X, X1) :- 
    X1 is X+1. 

注意,需要兩個變量:一個保持增加的值的原始值和一個。爲了做這個謂詞執行的計算有用,兩個變量必須是謂詞的參數。第一個是輸入參數,第二個是輸出參數(儘管這不會在語言中反映出來,但是可以從is/2的工作方式得到)。

+0

所以我陷入了一個無限循環,我需要一個變量來保存這個值,以及一個使得增量的變量。感謝您的解釋。 =) –