我已經寫了一組兩個謂詞來測試一個數是否是方數。序言問題 - 方塊號
patrat_perfect(A):- patr(A, 0).
patr(A, S):- A =:= S * S.
patr(A,S):- A > S * S, T is S+1, patrat(A, T).
patr(A,S):- A < S * S, fail.
第一謂詞,patrat_perfect
只需執行用於第二謂詞的呼叫與用於第二參數的值0,並且其應該被測試是否它是所述第一參數的完美的正方形的數目。
的patr
謂詞實際上搜索從0
該號碼S
到sqrt(A)
,其尊重方程S * S = A
。爲了這樣做,如果A > S * S
的謂詞增加了S
的值1
。如果在下一個呼叫A = S * S
處,則謂詞返回true
,並且如果A < S * S
,則謂詞通過調用內置謂詞fail
返回false
。
問題是,在每次調用patrat_perfect
謂詞時,都會收到false值。你能告訴我我哪裏錯了嗎?
您是否嘗試過調試謂詞? – svick 2010-09-08 08:19:41
你可以命名你的謂詞「perfect_square」和「square」。這樣你就會注意到「patrat」沒有被定義。 – Andy 2010-09-08 08:59:39
@安迪,如果沒有謂詞'patrat',Prolog會抱怨並且不會返回'false'。 – svick 2010-09-08 10:45:24