Prolog参数匹配谓词

时间:2015-03-08 09:40:08

标签: indexing syntax prolog arguments

我正在关注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并不像示例中那样,而是解释为新变量。

我希望有人可以对此事有所了解。

提前致谢。

0 个答案:

没有答案