您可以使用蓄電池與0
開始,被throught的順序,各時間「發出」更新了它的結果,所以:
userInput(X) :-
userInput(0,X).
現在每次統一X
與蓄電池:
userInput(X,X).
當然遞歸情況下(S)已確定下一個項目,你可以使用下面的指南:
- 如果數字
X
小於或等於零,新X2
是X2 is -X+1
;和
- 如果數字
X
大於零,新的X2
是X2 is -X
。
你可以寫這些爲:
userInput(X,R) :-
X =< 0,
!,
X2 is -X+1,
userInput(X2,R).
userInput(X,R) :-
X2 is -X,
userInput(X2,R).
或者把他們放在一起:
userInput(X) :-
userInput(0,X).
userInput(X,X).
userInput(X,R) :-
X =< 0,
!,
X2 is -X+1,
userInput(X2,R).
userInput(X,R) :-
X2 is -X,
userInput(X2,R).
這產生:
?- userInput(X).
X = 0 ;
X = 1 ;
X = -1 ;
X = 2 ;
X = -2 ;
X = 3 ;
X = -3 ;
X = 4 ;
X = -4 ;
X = 5 ;
X = -5 ;
X = 6 ;
X = -6 ;
X = 7 ;
X = -7
替代:
是更容易被簡單地首先指出0
另一種是userInput/1
:
userInput(0).
,然後使用累加器與1
啓動其他情況:
userInput(X) :-
userInput(1,X).
現在每次迭代,因此統一了X
,結果爲-X
,在遞歸的情況下,您增加了X
。所以:
userInput(X,X).
userInput(X,NX) :-
NX is -X.
userInput(X,R) :-
X1 is X+1,
userInput(X1,R).
或者把他們放在一起:
userInput(0).
userInput(X) :-
userInput(1,X).
userInput(X,X).
userInput(X,NX) :-
NX is -X.
userInput(X,R) :-
X1 is X+1,
userInput(X1,R).
你爲什麼不傳遞控制'+'和'-',你可以把它稱爲'sign'第二個參數? –
*但是要將'X'從正向計數切換到負向計數根本不起作用。*您的意思是您有一些您嘗試過的代碼,但它不工作?你有關於你的代碼的問題嗎?也許你可以展示你的嘗試。 – lurker
您是否正確發佈了示例:是X = -1; X = -2「正確或假設爲」X = -1; X = 2; X = -2;'?兩者都可以完成,但只要檢查是否容易犯錯。 –