我正在关注http://www.learnprolognow.org教程,并找到了一个让我感到困惑的练习2.4(http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse7)的解决方案:
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\=V1, H2\=V2, H3\=V3.
给定6个单词,我们必须根据垂直和水平单词(Vx/Hx
)的选择找到填字游戏网格的可能排列。
根据我的理解,填字游戏谓词中的多个word
查询对非匿名参数执行某种索引+匹配,这些参数表示网格上的交叉点,其中两个单词必须共享一个字母。
到目前为止,在教程中,该语法尚未出现。我在网上广泛搜索,但没有用。
这是如何运作的?
我尝试模仿行为时遇到了一些疑问,但Prolog解释V1H1
并不像示例中那样,而是解释为新变量。
我希望有人可以对此事有所了解。
提前致谢。