如何填写prolog列表中的空白

时间:2015-10-16 08:35:48

标签: prolog

我正在制作像Prolog中的应用程序一样的策划者,但我仍然在猜测解决方案的其余部分。 我设法做了第一个猜测,这是一个6种随机颜色的列表。 我想告诉Prolog正确的猜测,然后它需要尝试用新颜色填充该列表中的空白。

color(green).
color(red).
color(blue).
color(purple).
color(yellow).
color(brown).
color(black).

guessedcorrect(Correct, Guess) :-
   Guess = Correct, 
   Guess = [S1, S2, S3, S4, S5, S6].

| ?- guessedcorrect([A, B, color(blue), D, E, F], Guess).

A = color(C)
B = color(G)
D = color(H)
E = color(I)
F = color(J)
Guess = [C,G,blue,H,I,J]

为什么这样做? 我希望它能为每个变量提供一种颜色,并保持蓝色。例如。

Guess = [green, black, blue, blue, green, red]

然后我想告诉它猜对了哪些颜色。

guessedcorrect(A, black, blue, D, E, red).

我试图用_替换变量,但它只给了我颜色(_)。

1 个答案:

答案 0 :(得分:0)

Clocksin-Mellish'教科书有一个策划者的例子,我曾用它测试我的Prolog翻译。

从你的问题我无法确定你为这个困难的谜题编写解决方案的程度(该程序实际上比我好得多)。所以请考虑这个“答案”的价值:几乎没有:)

尝试

guessedcorrect(Correct, Guess) :-
   maplist(test_color, Correct),
   Guess = Correct.

test_color(color(C)) :- color(C).

你得到了

?- guessedcorrect([A, B, color(blue), D, E, F], Guess).
A = B, B = D, D = E, E = F, F = color(green),
Guess = [color(green), color(green), color(blue), color(green), color(green), color(green)] ;
A = B, B = D, D = E, E = color(green),
F = color(red),
Guess = [color(green), color(green), color(blue), color(green), color(green), color(red)] 
...