这是一段用于打印正方形的代码:
show_result(Squares,MaxRow,MaxCol) :-
show_result(Squares,MaxRow,MaxCol,1), nl.
show_result(_,MaxRow,_,Row) :- Row > MaxRow, !.
show_result(Squares,MaxRow,MaxCol,Row) :-
show_result(Squares,MaxRow,MaxCol,Row,1), nl,
Row1 is Row+1, show_result(Squares,MaxRow,MaxCol,Row1).
show_result(_,_,MaxCol,_,Col) :- Col > MaxCol, !.
show_result(Squares,MaxRow,MaxCol,Row,Col) :-
(memberchk(sq(Row,Col,X),Squares), !, write(X); write('#')).
Col1 is Col+1, show_result(Squares,MaxRow,MaxCol,Row,Col1).
运行show_result([sq(1,2,'c'),sq(2,1,'A'),sq(2,2,'a'),sq(2,3,'C'),sq(3,2,'t')],3,3)
后
它会给出一个结果:
#c#
AaC
#t#
如何将结果存储到列表中,格式为[[#,c,#],[A,a,C],[#t#]]
?
任何人都可以写这个函数:show_result(Squares, MaxRow, MaxCol,result)
?
非常感谢你。
答案 0 :(得分:1)
在描述列表时,请始终考虑使用DCG。在您的情况下,您只需对代码进行一些简单的修改即可轻松获得所需内容:
show_result(Squares,MaxRow,MaxCol, List) :-
phrase(show_result(Squares,MaxRow,MaxCol,1), List).
show_result(_,MaxRow,_,Row) --> { Row > MaxRow }, !.
show_result(Squares,MaxRow,MaxCol,Row) -->
{ phrase(show_result(Squares,MaxRow,MaxCol,Row,1), Line) } ,
[Line],
{ Row1 is Row+1 },
show_result(Squares,MaxRow,MaxCol,Row1).
show_result(_,_,MaxCol,_,Col) --> { Col > MaxCol }, !.
show_result(Squares,MaxRow,MaxCol,Row,Col) -->
( { memberchk(sq(Row,Col,X),Squares) } ->
[X]
; [#]
),
{ Col1 is Col+1 },
show_result(Squares,MaxRow,MaxCol,Row,Col1).
示例查询及其结果:
?- show_result([sq(1,2,'c'),sq(2,1,'A'),sq(2,2,'a'),sq(2,3,'C'),sq(3,2,'t')], 3, 3, List).
List = [[#, c, #], ['A', a, 'C'], [#, t, #]]