2015-10-16 58 views
0

我正在使用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). 

我試圖用_替換變量,但它只是給了我顏色(_)。

+0

'guessedcorrect/2'只是統一了它的參數,並確保他們有六個要素。我不明白你如何擁有你所說的輸出。此外,你沒有告訴是你期望擁有的行爲。 – coredump

+0

我也不明白,我只是添加了預期的行爲。 – k0enf0rNL

+0

'guessedcorrect'的定義報告S1,...,S6的未使用變量。行'| ?-'報告一個語法錯誤,'|'符號在這裏做什麼?另外,如果我輸入'guessedcorrect'([A,B,color(blue),D,E,F],Guess)。'的查詢,那麼沒有報告'X = color(Y)',只是'Guess = [ A,B,顏色(藍色),D,E,F] .'。如果你的問題太模糊,你將不會有很好的答案。 – coredump

回答

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