Prolog algorith with eclipse



我使用Eclipse与Swipl。代码试图解决此

       d o s  
 +     d o s  
 +   t r e s
 = s i e t e

生成输出:

?- criptograma(L).
L = [[s, 3], [e, 9], [o, 2], [t, 7], [d, 4], [r, 5], [i, 8]] 

而不是正确的答案

我在哪里错了?:(

我有一些指向。

1.您不必定义volteaL您只能使用reverse

?- reverse([a,b,c],R).
R = [c, b, a].

2.您不必致电member(R1,L), eliminaElement(R1,L,L2)只需使用选择/3

?- select(Selection,[0,1,2],Rest).
Selection = 0,
Rest = [1, 2] ;
Selection = 1,
Rest = [0, 2] ;
Selection = 2,
Rest = [0, 1] ;
  1. 似乎您忽略了三个数字的案例总和超过20。 ex:9+8+7=24.我认为这是关键的部分。

4.此信息是多余的,但是您可以使用CLPFD更容易解决此问题(请参见下文(。我在2个端口中编写了此代码。

:-use_module(library(clpfd)).
solve([D,O,S,T,R,E,I]):-
    [D,O,S,T,R,E,I] ins 0..9,
    all_different([D,O,S,T,R,E,I]),
    100*D + 10*O + S +
    100*D + 10*O + S +
    1000*T + 100*R + 10*E + S #=
    10000*S + 1000*I + 100*E + 10*T + E,
    D #> 0,
    T #> 0,
    S #> 0,
    labeling([ffc],[D,O,S,T,R,E,I]).

测试:

?- solve([D,O,S,T,R,E,I]).
D = 5,
O = 8,
S = 1,
T = 9,
R = 2,
E = 3,
I = 0 ;
false.

最新更新