我開始學習Prolog,我想要一個給定整數P
的程序給整數A
和B
,使得P = A² + B²
。如果沒有滿足這個方程的A
和B
值,false
應退還Prolog程序獲取(整數)數字作爲兩個整數正方形的總和,爲什麼它不起作用?
例如:如果P = 5
,它應該給A = 1
和B = 2
(或A = 2
和B = 1
),因爲1² + 2² = 5
。
我想這應該工作:
giveSum(P, A, B) :- integer(A), integer(B), integer(P), P is A*A + B*B.
與查詢:
giveSum(5, A, B).
然而,事實並非如此。我該怎麼辦?我對Prolog很陌生,所以我仍然犯了很多錯誤。
在此先感謝!
非常感謝您的回覆。 我有幾個問題。如果你能回答他們,那將是非常棒的。 '非單調謂詞'是什麼意思,/ 1或/ 3是什麼意思,以及label()函數做了什麼? 在因特網上,我讀了「爲Vars中的每個變量賦值」,標籤意味着系統地嘗試使用有限域變量Vars的值,直到所有變量都被研磨爲止。爲函數標籤(),但我不是很明白它。 也感謝您注意到不好的做法,我更改了名稱,將來會使用下劃線和聲明式名稱。 – Kevin
請爲此單獨提出問題。他們都值得自己討論:1)單調性的定義和2)什麼是「標籤」?只有一個問題很簡單,可以在評論中回答:'f/3'是一個**謂詞指示符**,表示一個名爲'f'的謂詞,帶有3 *個參數*。請注意,我們總是討論**謂詞**,它們比*函數*更普遍。偉大的名字!查找和使用對謂詞**一般性**公平的好的陳述性名稱是在Prolog中編程時非常重要的一個方面,也可能是其中較難的一個。 – mat