Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在prolog中填写列表中的空格_Prolog - Fatal编程技术网

如何在prolog中填写列表中的空格

如何在prolog中填写列表中的空格,prolog,Prolog,我正在用Prolog编写一个类似于mastermind的应用程序,但我一直在猜测解决方案的其余部分。 我设法做了第一个猜测,这是一个6种随机颜色的列表。 我想告诉Prolog正确的猜测,然后它需要尝试用新颜色填充列表中的空白 color(green). color(red). color(blue). color(purple). color(yellow). color(brown). color(black). guessedcorrect(Correct, Guess) :- Gu

我正在用Prolog编写一个类似于mastermind的应用程序,但我一直在猜测解决方案的其余部分。 我设法做了第一个猜测,这是一个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).

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

Clocksin Mellish的教科书中有一个我用来测试Prolog解释器的主谋示例

根据你的问题,我无法确定你离为这个难题编写解决方案还有多远(这个程序实际上比我玩得好)。因此,请考虑这个“答案”的价值:几乎没有什么:

试一试

你得到了什么

?- 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)] 
...

guessedcorrect/2
只需统一其参数并确保它们有六个元素。我不明白你怎么能有你所说的产出。另外,您没有告诉我was是您期望的行为。我也不明白,我只是添加了期望的行为。
guessedcorrect
的定义报告了S1、…、S6的未使用变量。行
|?-
报告语法错误,
|
符号在这里做什么?另外,如果我输入查询
guessedcorrect([A,B,color(blue),D,E,F],Guess)。
则不会报告
X=color(Y)
,只报告
Guess=[A,B,color(blue),D,E,F]。
。如果你的问题太模糊,你就不会有好的答案。
?- 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)] 
...