如何创建一对并将其放在Prolog的列表中?

时间:2012-05-16 19:26:08

标签: list prolog

我正在使用Prolog进行编程,而且我完全迷失了......即使它们没有任何相似之处,我仍然会将编程语言混合在一起...... 我正在制作一款名为Meta-Forms的游戏作为一项任务,根据我给出的一些线索,我必须在3x3板中放置不同类型的棋子。 例如,要将黄色矩形放在电路板'Board'的左上角,我将拥有以下代码: 放置(片(矩形,黄色),顶部,左侧,板) 根据第二和第三个论点,我根据位置将它放在列表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).

应打印出来:

[片(正方形,黄色),片(圆,红色),片(三角形,蓝色),片(三角形,红色),片(三角形,黄色),片(圆,蓝色),片(正方形,蓝),片(圆,黄色),片(正方形,红色)]

1 个答案:

答案 0 :(得分:1)

尝试重新定义put_piece;例如,在左上角放置一个片段是:

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

然后相应地简化place

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

我不知道你在使用form / forma做什么。