2013-11-24 26 views
2

所以我試圖用prolog解決kenken,但是我從一開始就遇到了幾個問題,首先讓我說我像kenken([X1,X2,X3,...) .X16])。我想用我之前定義的規則解決這個x的問題。所以可以說第一個單元格有3個值X1,X2和X3,我想通過使用乘法來得到2,這意味着X1 * X2 * X3 = 2,現在如何設置規則以查看所有可能的解決方案類似的東西。 也我如何告訴我的x只使用值的範圍1-4。 我試圖做一些像Prolog kenken solver 4 by 4

:- use_module(library(clpr)). 
solve([X1,X2,X3]):- 
    {X1*X2*X3=2}. 

但它給了我一個非常奇怪的輸出。

回答

0

您需要is運營商做算術題:

2 is X1*X2*X3

注意,這是行不通的,除非X的所有綁定到數字。

+1

現代的Prolog系統提供* *約束作爲用於更加聲明替代'是/ 2'。 OP已經在使用CLP(R),它不需要'is/2',並且還允許在算術表達式中使用變量。 – mat

3

由於您對整數進行推理,而不是浮動,請考慮使用library(clpfd)而不是CLP(R)。在SICStus,SWI和YAP,可以約束有限域變量X與整數範圍1-4:

X in 1..4

您可以使用內置的謂詞label/1尋找具體的解決方案。例如用SWI-Prolog的:

?- Vars = [A,B,C], A*B*C#= 2, Vars ins 1..4, label(Vars). 

得到:

Vars = [1, 1, 2], A = B, B = 1, C = 2 ; 
Vars = [1, 2, 1], A = C, C = 1, B = 2 ; 
Vars = [2, 1, 1], A = 2, B = C, C = 1.