2011-09-12 38 views
1

我遇到以下問題:桌子上有一些用立方體建造的塔。在Prolog中將立方體從位置A移動到位置

 a 
     b d 
     c e 
------------------- <- table 

現在我想立方體移動到另一種情況,像這樣的:

 c e 
     a b d 
------------------- 

的Prolog程序應該打印步驟獲得這種情況,例如:move cube a onto the table,等等。我在序言代表的第一種情況:

clean(t). % t is the table, you can always put things there 
clean(X) :- \+ on(_,X). % X is the top element, if there is nothing above it 

on(a,b). % a is on b 
on(b,c). % b on c 
on(d,e). % d on e 
on(c,t). % c on the table 
on(e,t). % and e on the table 

現在我的問題是找到一個解決方案,以Prolog的打印步驟,新的形勢。我的第一個問題是,如何告訴Prolog新形勢如何。我嘗試了一些清單,但直到現在我還沒有成功。

有沒有人有一個想法如何解決這個問題?

+0

我想你可能需要陳述其他事實,可能像nextTo(a,b)? –

+0

nextTo是什麼意思?左還是右?或以上? – Tobias

+0

我在說如果你沒有額外的事實,你可能無法做出prolog打印你的新情況。我的意思是左和右,但如果這對你來說模棱兩可,請嘗試使用另一個標識符名稱。 –

回答

1

如果您通過在數據庫中的on/2謂詞的事實編碼問題的狀態,那麼你只能使用assertretract更改數據庫更改狀態(和你的謂詞可能必須聲明dynamic以及) 。這很笨拙。一個更好的解決方案是將問題狀態作爲參數傳遞給您的求解謂詞(也可以隱藏包裝謂詞後面的結構)。對於回溯,這可能會更好,因此您可能需要實施搜索解決方案。

+0

你能告訴我一個例子嗎? – Tobias

相關問題