Изучение Пролога: решение кроссворда

я пытаюсь учитьсяProlog следуя инструкциям наэтот сайт, и я могуне найти решение для упражнения (и тамнет решения на сайте).

Вот'Что я должен сделать:

Вот шесть итальянских слов:

Астанте, Астория, Баратто, Кобальто, Пистолет, Статале.

Они должны быть расположены, кроссворд моды, в следующей сетке:

Следующая база знаний представляет собой лексикон, содержащий эти слова:

слово (astante, a, s, t, a, n, t, e).слово (Астория, а, с, т, о, г, я, а).слово (baratto, b, a, r, a, t, t, o).слово (кобальто, с, о, б, а, л, т, о).слово (пистолет, р, я, с, т, о, л, а).слово (statale, s, t, a, t, a, l, e).

Напишите предикатный кроссворд / 6, который говорит нам, как заполнять сетку. Первые три аргумента должны быть вертикальными словами слева направо, а последние три аргумента - горизонтальными словами сверху вниз.

Теперь тот же вопрос был задантам но каждое данное решение использует то, что я нене знаю (а яЯ не должен знать, чтобы решить эту проблему).

Чтобы прояснить, в то время как вещи в связанном вопросе, безусловно, работают, они используют вещи, которые нев руководстве еще не объяснили, что ям, и это означает, что мне нужно решить упражнениебез используя такие вещи, так что нетmaplist и тому подобные вещи.

Моя идея состояла в том, чтобы заполнить доску буквами из заданных слов, с некоторыми ограничениями:

слово в V1 должно иметь в качестве второго символа второй символ слова в H1слово в V1 должно иметь в качестве четвертого символа второй символ слова в H2слово в V1 должно иметь в качестве шестого символа второй символ слова в H3

и так далее..

Так вот'мой код:

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 'комментарий, ямы пытались использовать код, найденный вэтот решение.

Вот's код:

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

Ответы на вопрос(2)

Ваш ответ на вопрос