前言打印一个事实,如目标或初始



我是prolog新手,我想打印一个初始值和一个目标事实如下面

initial([8,1,3,7,0,2,6,5,4]).
goal([1,2,3,8,0,4,7,6,5]).
=============
= 8 = 1 = 3 =
=============
= 7 = 0 = 2 =
=============
= 6 = 5 = 4 =
=============

你能帮我做一下吗?

硬编码方式:

pretty_print([A, B, C, D, E, F, G, H, I]) :-
    write(=============), nl, nl,
    write('= '), write(A), write(' = '), write(B), write(' = '), write(C), write(' ='), nl, nl,
    write(=============), nl, nl,
    write('= '), write(D), write(' = '), write(E), write(' = '), write(F), write(' ='), nl, nl,
    write(=============), nl, nl,
    write('= '), write(G), write(' = '), write(H), write(' = '), write(I), write(' ='), nl, nl,
    write(=============), nl, nl.

with format:

pretty_print(L) :-
    format('=============~n
= ~w = ~w = ~w =~n
=============~n
= ~w = ~w = ~w =~n
=============~n
= ~w = ~w = ~w =~n
=============', L).

与一些功能帮助:

length_(A, B) :- length(B, A).
pretty_print(L) :-
    length(Rows, 3),
    maplist(length_(3), Rows),
    append(Rows, L),
    maplist(format('=============~n~n= ~w = ~w = ~w =~n~n'), Rows),
    write(=============), nl.

与lambda模块:

pretty_print(L) :-
    length(Rows, 3),
    maplist(X^length(X, 3), Rows),
    append(Rows, L),
    maplist(format('=============~n~n= ~w = ~w = ~w =~n~n'), Rows),
    write(=============), nl.

用法:

?- initial(X), pretty_print(X).

?- goal(X), pretty_print(X).

最新更新