2012-05-16 25 views
1

我在Prolog中編程,我完全失去了......即使他們沒有任何相似的東西,我仍然在編程語言中混合使用...... 我正在製作一個名爲Meta-Forms的遊戲作爲一個任務根據我給出的一些線索,我必須在3x3板上放置不同類型的棋子。 例如,要將黃色長方形放置在電路板'Board'的左上角,我會得到以下代碼: place(piece(rectangle,yellow),top,left,Board) 根據第二個和第三個參數,我已根據位置將它放入列表B中。 (上,左),(上,中),(上,右),(中,左),(中,中),(中,左),(下,左),底部,右側)]。 ,而不是我需要那裏的位置「片(矩形,黃色)」 你能幫我做「放置」功能嗎? 我到目前爲止做到了這一點,但它不工作如何創建一個對並將其放入Prolog中的列表中?

put_piece(X, [X,_,_,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,left,_), !. 
put_piece(X, [_,X,_,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,middle,_), middle), !. 
put_piece(X, [_,_,X,_,_,_,_,_,_]) :- line_of(place(_,top,_,_), top), column_of(place(_,_,right,_), right), !. 
put_piece(X, [_,_,_,X,_,_,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,left,_), left), !. 
put_piece(X, [_,_,_,_,X,_,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,middle,_), middle), !. 
put_piece(X, [_,_,_,_,_,X,_,_,_]) :- line_of(place(_,center,_,_), center), column_of(place(_,_,right,_), right), !. 
put_piece(X, [_,_,_,_,_,_,X,_,_]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,left,_), left), !. 
put_piece(X, [_,_,_,_,_,_,_,X,_]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,middle,_), middle), !. 
put_piece(X, [_,_,_,_,_,_,_,_,X]) :- line_of(place(_,bottom,_,_), bottom), column_of(place(_,_,right,_), right), !. 

line_of(place(_,Line,_,_), Line). 
column_of(place(_,_,Column,_), Column). 
cor_de(defPiece(_,Color), Color). 
forma_de(defPiece(Form,_), Form). 

place(P, L, Col, Tab) :- 
    put_piece(P, Tab), 
    line_of(place(_,L,_,_), L), 
    column_of(place(_,_,Col,_), Col), 
    color_of(Piece, cor), 
    form_of(P, forma). 

另外,我種需要你如何打造一雙幫助。一塊應該是一對包含一種形式和一種顏色,比如位置應該是一對列和一條線。

非常感謝你提前。

實施例:

challenge(1, Board) :- 
    place(piece(square, blue), bottom, left, Board), 
    place(piece(square, yellow), top, left, Board), 
    place(piece(circle, blue), center, right, Board), 
    place(piece(circle, red), top, middle, Board), 
    place(piece(square, red), bottom, right, Board), 
    place(piece(triangle, blue), top, right, Board), 
    place(piece(circle, yellow), bottom, middle, Board), 
    place(piece(triangle, red), center, left, Board), 
    place(piece(triangle, yellow), center, middle, Board). 

應該打印:

[片(正方形,黃色),片(圓,紅色),片(三角形,藍色),片(三角形,紅色) ,一塊(三角形,黃色),一塊(圓形,藍色),一塊(方形,藍色),一塊(圓形,黃色),一塊(方形,紅色)]

+0

您的put_piece表達式不會在任何地方放置任何東西,除非在Board中的位置未被綁定。在以下方面的內容之間沒有任何聯繫: - 在你的put_piece定義和右邊的 - 從來沒有一個好兆頭。 –

+0

您能否提供您希望如何使用這些內容的任何示例,以便您可以更清楚地完成您正在嘗試完成的任務? –

+0

*一旦用戶獲得了信譽,您就不能撤回您的問題。如果有合理的理由要求解除,請爲主持人注意並提供詳細解釋。* –

回答

1

嘗試重新定義put_piece;例如,將一張左上角是:

put_piece(X, [X,_,_,_,_,_,_,_,_], top, left). 

然後簡化place相應:

place(P,L,C,T) :- 
    put_piece(P, T, L, C). 

我不知道你與形式/形式上做什麼。

+0

這就是主意,是的。那麼你不應該需要顏色和表單位(驗證除外)。 –

+0

你先生,是個天才! ahah非常感謝你!它工作完美 – FriedRike

相關問題