目前我正在做一个 Prolog教程。
有一个练习可以解决 5 个单词的填字游戏。
我的问题是Prolog
在很早的时候就停止了我的解决方案的统一。
它看起来像这样:
并且给出了一个小的知识库:
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/6
。
所以我认为谓词crossword
必须包含 6 个由变量组成的单词,并且在两个单词交叉的每个字段中,我都设置了相同的变量。
crossword(word(H1, A1, B1, C1, D1, E1, F1, G1),
word(H2, A2, B2, C2, D2, E2, F2, G2),
word(H3, A3, B3, C3, D3, E3, F3, G3),
word(V1, _1, B1, _2, B2, _3, B3, _4),
word(V2, _5, D1, _6, D2, _7, D3, _8),
word(V3, _9, F1, _10, F2, _11, F3 _12)).
在 SWI-Prolog 中,我输入了以下请求:
?- crossword(H1, H2, H3, V1, V2, V3).
所以我要求解决填字游戏。
我得到的结果是这样的:
H1 = word(_720, _722, _724, _726, _728, _730, _732, _734),
H2 = word(_738, _740, _742, _744, _746, _748, _750, _752),
H3 = word(_756, _758, _760, _762, _764, _766, _768, _770),
V1 = word(_774, _776, _724, _780, _742, _784, _760, _788),
V2 = word(_792, _794, _728, _798, _746, _802, _764, _806),
V3 = word(_810, _812, _732, _816, _750, _820, _768).
问:为什么Prolog
这么早就停止统一?为什么它不返回任何解决方案?