2014-05-18 25 views
-1

因此,我設法爲Prolog編寫了SEND + MORE = MONEY程序,並且在標記結果時遇到了麻煩。任何想法如何做到這一點?我一直使用標籤功能,但它仍然無法正常工作。我迷失在這裏。如何在SEND + MORE = MONEY程序中使用Prolog的標籤功能(ECLIPSE程序)?

:- lib(ic). 

puzzle(List) :- 
    List = [S, E, N, D, M, O, R, Y], 
    List :: 0..9, 
    diff_list(List), 
        1000*S + 100*E + 10*N + D 
     +   1000*M + 100*O + 10*R + E 
     $= 10000*M + 1000*O + 100*N + 10*E + Y, 
    S $\= 0, M $\= 0, 
    shallow_backtrack(List). 

shallow_backtrack(List) :- 
    (foreach(Var, List) do once(indomain(Var))). 

diff_list(List) :- 
    (fromto(List, [X|Tail], Tail, []) do 
      (foreach(Y, Tail), param(X) do 
         X $\= Y 
      ) 
    ). 

結果:

?- puzzle(X). 
X = [9, 5, 6, 7, 1, 0, 8, 2] 
Yes (0.00s cpu) 

任何幫助,將不勝感激!謝謝!

回答

1

這是你的程序,使用labeling的變體:

:- lib(ic). 

puzzle(List) :- 
    List = [S, E, N, D, M, O, R, Y], 
    List :: 0..9, 
    alldifferent(List), 
    1000*S + 100*E + 10*N + D 
     +   1000*M + 100*O + 10*R + E 
     $= 10000*M + 1000*O + 100*N + 10*E + Y, 
    S $\= 0, M $\= 0, 
    labeling(List). 
+0

但答案並不把它給我以標記形式。它所做的全部是 ? - 拼圖(X)。 X = [9,5,6,7,1,0,8,2] 是(0.00s cpu,解決方案1,可能更多) 否(0.01s cpu) – user3390252

+0

@ user3390252約束條件中的術語「標籤」編程意味着爲每個變量分配具體的值。也許通過使用「標籤」這個詞,你只是想在答案中的每個變量的名稱?然後用'謎題([S,E,N,D,M,O,R,Y])'調用''。 –

+0

哦,我現在明白了... – user3390252

相關問題