пролог распечатать факт как цель или начальный - PullRequest
0 голосов
/ 17 декабря 2011

Я новичок в прологе, и я хотел бы напечатать начальный и целевой факт, как показано ниже

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 =

=============

Не могли бы вы помочь мне сделать это?

1 Ответ

1 голос
/ 18 декабря 2011

простой жестко закодированный способ:

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.

с форматом:

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.

с модулем лямбда :

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).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...