我使用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]]
而不是正确答案
我哪里错了? :(
答案 0 :(得分:1)
我有一些指示。
1.您不必定义volteaL
您可以使用reverse
?- reverse([a,b,c],R).
R = [c, b, a].
2.您不必拨打member(R1,L), eliminaElement(R1,L,L2)
只需使用select / 3
?- select(Selection,[0,1,2],Rest).
Selection = 0,
Rest = [1, 2] ;
Selection = 1,
Rest = [0, 2] ;
Selection = 2,
Rest = [0, 1] ;
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.