我正在尝试学习Prolog,学习这站点上的教程,但是我找不到一个练习的解决方案(而且在这个站点上没有解决方案)。
我要做的是:
这里有六个义大利词: 阿斯坦特,阿斯托利亚,巴拉托,钴,开心果,斯塔塔莱。 它们将以纵横字谜的方式排列,以下列网格方式排列:

以下知识库表示包含这些词的词典:
编写一个谓词填字游戏/6,告诉我们如何填写网格。前三个参数应该是从左到右的垂直词,最后三个参数是自上而下的水平词。
现在,已经向那里提出了同样的问题,但是每个给定的解决方案都使用我不知道的东西(我不应该知道这个问题)。
要澄清的是,虽然链接问题中的内容确实有效,但它们使用的东西还没有在我所遵循的指南中解释,这意味着我需要用这种东西来解决没有maplist 的练习,所以没有之类的东西。
我的想法是用给定单词的字母填充董事会,并有一些限制因素:
以此类推。
这是我的密码:
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, V11,V12,V13,V14,V15,V16,V17),
word(H1, H11,V12,H13,H14,H15,H16,H17),
word(H2, H21,V14,H23,H24,H25,H26,H27),
word(H3, H31,V16,H33,H34,H35,H36,H37),
word(V2, V21,V22,V23,V24,V25,V26,V27),
word(H1, H11,H12,H13,V22,H15,H16,H17),
word(H2, H21,H22,H23,V24,H25,H26,H27),
word(H3, H31,H32,H33,V26,H35,H36,H37),
word(V3, V31,V32,V33,V34,V35,V36,V37),
word(H1, H11,H12,H13,H14,H15,V32,H17),
word(H2, H21,H22,H23,H24,H25,V34,H27),
word(H3, H31,H23,H33,H34,H35,V36,H37). (如果没有很好的格式化,我很抱歉,但我仍然不知道Prolog的正确缩进样式是什么)。
当然,如果我的想法看起来是正确的(至少对我来说),这段代码会返回No,我不知道为什么。
有什么线索吗?
编辑:
在@mbratch的评论之后,我尝试使用这解决方案中的代码。
下面是代码:
crossword(V1, V2, V3, H1, H2, H3) :-
word(V1, V1a, V1bH1b, V1c, V1dH2b, V1e, V1fH3b, V1g),
word(V2, V2a, V2bH1d, V2c, V2dH2d, V2e, V2fH3d, V2g),
word(V3, V3a, V3bH1f, V3c, V3dH2f, V3e, V3fH3f, V3g),
word(H1, H1a, V1bH1b, H1c, V2bH1d, H1e, V3bH1f, H1g),
word(H2, H2a, V1dH2b, H2c, V2dH2d, H2e, V3dH2f, H2g),
word(H3, H3a, V1fH3b, H3c, V2fH3d, H3e, V3fH3f, H3g).代码工作,但它有一个问题,重复,我不介意。
我想要理解的是,为什么这个在我的返回No时工作。
发布于 2014-01-19 18:35:36
几次尝试之后,基于@joel76 76的评论,我注意到我的第一段代码是错误的,因为我多次声明了H1、H2和H3,因此第二行计算的结果在第六行被更改,这导致了Prolog返回的No。
因此,与其用多行方式进行操作,不如将它们与以下结果合并:
crossword(V1,V2,V3,H1,H2,H3):- word(V1, V11, V12, V13, V14, V15, V16, V17),
word(V2, V21, V22, V23, V24, V25, V26, V27),
word(V3, V31, V32, V33, V34, V35, V36, V37),
word(H1, H11, V12, H13, V22, H15, V32, H17),
word(H2, H21, V14, H23, V24, H25, V34, H27),
word(H3, H31, V16, H33, V26, H35, V36, H37).现在起作用了。
发布于 2015-09-02 13:18:43
crossword(V1,V2,V3,H1,H2,H3) :-
word(V1, _, V12, _, V14, _, V16, _),
word(V2, _, V22, _, V24, _, V26, _),
word(V3, _, V32, _, V34, _, V36, _),
word(H1, _, V12, _, V22, _, V32, _),
word(H2, _, V14, _, V24, _, V34, _),
word(H3, _, V16, _, V26, _, V36, _),
V1 \= H1.https://stackoverflow.com/questions/21220573
复制相似问题