1

私は Prolog でプログラミングしていて、完全に途方に暮れています... たとえ似ていなくても、プログラミング言語をごちゃまぜにしています... 課題として、Meta-Forms というゲームを作成しています。与えられたいくつかの手がかりに従って、3x3 ボードにさまざまな種類のピースを配置します。たとえば、ボード「Board」の左上隅に黄色の長方形を配置するには、次のコードを使用します。 place(piece(rectangle, yellow), top, left, Board) 2 番目と 3 番目の引数による、位置に応じてリストBに配置しました。[(上、左)、(上、中)、(上、右)、(中、左)、(中、中)、(中、左)、(下、左)、(下、中)、(右下)]。しかし、位置の代わりに「ピース(長方形、黄色)」が必要です」を作るのを手伝ってくれませんか

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

これを印刷する必要があります:

[ピース(四角,黄),ピース(丸,赤),ピース(三角,青),ピース(三角,赤),ピース(三角,黄),ピース(丸,青),ピース(四角,青),ピース(丸、黄)、ピース(四角、赤)]

4

1 に答える 1

1

を再定義してみてくださいput_piece。たとえば、左上にピースを配置すると、次のようになります。

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

place次に、それに応じて単純化します。

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

form/forma で何をしているのかわかりません。

于 2012-05-16T22:34:14.793 に答える