我正在跟随Learn Prolog Now!并且正在查看练习 2.4。
我在这里找到的解决方案似乎可以解决,但并不完全:
word(astante, a,s,t,a,n,t,e).
word(astoria, a,s,t,o,r,i,a).
word(baratto, b,a,r,a,t,t,o).
word(cobalto, c,o,b,a,l,t,o).
word(pistola, p,i,s,t,o,l,a).
word(statale, s,t,a,t,a,l,e).
crossword(V1,V2,V3,H1,H2,H3) :-
word(V1, _, V1H1, _, V1H2, _, V1H3, _),
word(V2, _, V2H1, _, V2H2, _, V2H3, _),
word(V3, _, V3H1, _, V3H2, _, V3H3, _),
word(H1, _, V1H1, _, V2H1, _, V3H1, _),
word(H2, _, V1H2, _, V2H2, _, V3H2, _),
word(H3, _, V1H3, _, V2H3, _, V3H3, _).
这会产生以下结果:
H1 = astoria
H2 = baratto
H3 = statale
V1 = astante
V2 = cobalto
V3 = pistola ? ;
H1 = astante
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = baratto
V3 = statale ? ;
H1 = astoria
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = cobalto
V3 = pistola ? ;
H1 = baratto
H2 = baratto
H3 = statale
V1 = baratto
V2 = baratto
V3 = statale ? ;
H1 = cobalto
H2 = baratto
H3 = statale
V1 = cobalto
V2 = baratto
V3 = statale ? ;
H1 = astante
H2 = baratto
H3 = statale
V1 = astante
V2 = baratto
V3 = statale ? ;
其中,只有 2 个是实用的:
H1 = astoria
H2 = baratto
H3 = statale
V1 = astante
V2 = cobalto
V3 = pistola ? ;
H1 = astante
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = baratto
V3 = statale ? ;
由于其他 3 个解决方案包含重复项,因此它们不是该问题的可行答案。
如何添加到填字游戏规则以使其仅返回 V1、V2、V3、H1、H2、H3 都是唯一的结果?