Я следую вместе с Learn Prolog Now! и смотрел Exercise 2.4.Как создать правило, которое возвращает каждое значение как уникальное
Раствор I found here, кажется, решить, но не полностью:
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 = astoria
H2 = baratto
H3 = statale
V1 = astante
V2 = cobalto
V3 = pistola ? ;
H1 = astante
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = baratto
V3 = statale ? ;
H1 = astoria
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = cobalto
V3 = pistola ? ;
H1 = baratto
H2 = baratto
H3 = statale
V1 = baratto
V2 = baratto
V3 = statale ? ;
H1 = cobalto
H2 = baratto
H3 = statale
V1 = cobalto
V2 = baratto
V3 = statale ? ;
H1 = astante
H2 = baratto
H3 = statale
V1 = astante
V2 = baratto
V3 = statale ? ;
Из них только 2 практичны:
H1 = astoria
H2 = baratto
H3 = statale
V1 = astante
V2 = cobalto
V3 = pistola ? ;
H1 = astante
H2 = cobalto
H3 = pistola
V1 = astoria
V2 = baratto
V3 = statale ? ;
Поскольку другие 3 решения содержат дубликаты, они не являются жизнеспособными ответами для pr oblem.
Как добавить к правилу кроссворда, чтобы он возвращал результаты только там, где V1, V2, V3, H1, H2, H3 уникальны?
+ 1 Мне нравится 'select/3' и использовать его все время. :) –