2012-12-11 62 views
1

我是Prolog的完整noob。我正在完成一項任務,我創建了一個總計S(以美分計)的更改計數器,0 < = S < = 100.因此,我需要顯示半美元,四分之一,一角硬幣,五分錢的數量。會員謂詞問題,換一美元

這裏是我的代碼:

change(S,H,Q,D,N,P) :- 
      member(H,[0,1,2]),  /* Half-dollars */  
      member(Q,[0,1,2,3,4]), /* quarters */ 
      member(D,[0,1,2,3,4,5,6,7,8,9,10]) , /* dimes */  
      member(N,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]), 
      /* ^^ nickels ^^ */ 

      S is 50*H + 25*Q +10*D + 5*N, 
      S =< 100, 
      P is 100-S. 

所以我的問題是,當我嘗試和計算像?- change(87,0,3,D,1,P).東西我在哪裏輸入查詢量爲87美分,我需要3個季度和1個鎳.....我得到一個錯誤陳述uncaught exception: error(existence_error(procedure,change/6),top_level/0)

隨着我的最後3行代碼我以爲我正在處理正確給定的金額。我需要對所給金額作出額外的規定嗎?

回答

0

你錯過了仙!我建議/ 3之間用來表達範圍:

..., 
between(0,100,Cents), 
..., 

..., 
S is 50*H + 25*Q +10*D + 5*N + Cents, 
..., 

測試:

?- change(87,H,Q,D,N,Cents,P). 
H = Q, Q = D, D = N, N = 0, 
Cents = 87, 
P = 13 ; 
H = Q, Q = D, D = 0, 
N = 1, 
Cents = 82, 
P = 13 ; 

WRT error(existence_error...我認爲你需要編譯腳本...