2015-11-08 79 views
2

年在大學前,我修修補補一些序言,但是這早已被人遺忘,所以我又算不算一個完整的beginnner(震撼人心!)這是什麼prolog輸出試圖說?

反正我是用一些布魯斯大老碼打,並想出了我認爲是全數(9x9)遊戲的數獨解算器。但是,當我運行它,它會產生一些非常奇怪的輸出:

Solution = [_#3(2..3),_#24(2:7),_#45(2..3:5:7),_#66(2..3:8),_#87(2..3:5..6:8),4,_#121(2:5..6),1,9,6,8,_#194(2..5:7:9),_#215(1..3:9),_#236(2..3:5:9),_#257(1..2:5:9),_#278(2:4..5),_#299(4:7),_#320(5:7),_#341(1..2),_#362(2:4),_#383(2:4..5:9),_#404(1..2:9),_#425(2:5..6:9),7,3,_#472(4:6),8,4,1,_#532(2:8),_#553(2:8),7,3,9,5,6,7,5,_#689(6:8),_#710(4:8..9),_#731(4:6:8..9),_#752(6:8..9),1,2,3,_#828(2..3),9,_#862(2..3:6),5,1,_#909(2:6),7,8,4,8,_#990(2:4:7),1,6,_#1037(2..5:9),_#1058(2:5:9),_#1079(4..5),_#1100(3..4:7),_#1121(5:7),5,_#1163(4:6..7),_#1184(4:6..7),_#1205(1:3..4:8),_#1226(3..4:8),_#1247(1:8),_#1268(4:6:8),9,2,9,3,_#1341(2:4:6),7,_#1375(2:4..5:8),_#1396(1..2:5:8),_#1417(4..6:8),_#1438(4:6),_#1459(1:5)] 

yes 

我期待......嗯,坦率地說,我是期待着徹底失敗的:)不過我以爲只有數字可以在這個輸出顯示。它試圖用這些#標記的東西告訴我什麼,以及那些看起來像範圍的東西?它是否試圖說有很多可能的解決方案,並且它一次告訴我所有人(似乎不太可能,因爲如果它是非常無益的),或者是這種錯誤狀態(在這種情況下,爲什麼它會編譯我的代碼並說「是「查詢?)

任何洞察力感激地收到!

+1

您正在使用GNU Prolog的。 – false

+0

是的,gnu prolog 1.3.0。有沒有重要的,我錯過了? –

+1

有點;其他系統如SICStus或SWI向您顯示這些答案,以便您可以將其粘貼回來。 – false

回答

4

我認爲這是一組約束不足以確定沒有搜索的解決方案的結果。例如,_#3(2..3)可能意味着名爲_#3的變量可能會採用範圍爲2..3的值。你可以嘗試標籤變量,像

..., labeling([], Solution). 

語法細節取決於你的解算器,當然...

+0

嗯,我很害怕這可能會在我還沒有準備好的方向:)這就是說,我_think_我理解你的評論是廣泛同意我的想法,這是告訴我一系列的答案是可能的? 同時,更多的信息可能是有用的 1)我使用gnu prolog 1.3.0, 2)您的語法結果爲「否」 3)「正常」(即更簡單的查詢,其行爲以我的方式期望)搜索似乎會導致多個輸出,並且我可以在第一個輸出後按分號來選擇「下一個」,或者我可以輸入字母「a」並將它們全部取出。 –

+1

如果標籤爲「否」,表示約束系統沒有解決方案... – CapelliC

+1

@TobyEggitt閱讀討論有限域的GNU Prolog手冊部分。 – lurker