37 lines
649 B
Prolog
37 lines
649 B
Prolog
pascal(N) :-
|
|
pascal(1, N, [1], [[1]|X]-X, L),
|
|
maplist(my_format, L).
|
|
|
|
pascal(Max, Max, L, LC, LF) :-
|
|
!,
|
|
make_new_line(L, NL),
|
|
append_dl(LC, [NL|X]-X, LF-[]).
|
|
|
|
pascal(N, Max, L, NC, LF) :-
|
|
build_new_line(L, NL),
|
|
append_dl(NC, [NL|X]-X, NC1),
|
|
N1 is N+1,
|
|
pascal(N1, Max, NL, NC1, LF).
|
|
|
|
build_new_line(L, R) :-
|
|
build(L, 0, X-X, R).
|
|
|
|
build([], V, RC, RF) :-
|
|
append_dl(RC, [V|Y]-Y, RF-[]).
|
|
|
|
build([H|T], V, RC, R) :-
|
|
V1 is V+H,
|
|
append_dl(RC, [V1|Y]-Y, RC1),
|
|
build(T, H, RC1, R).
|
|
|
|
append_dl(X1-X2, X2-X3, X1-X3).
|
|
|
|
% to have a correct output !
|
|
my_format([H|T]) :-
|
|
write(H),
|
|
maplist(my_writef, T),
|
|
nl.
|
|
|
|
my_writef(X) :-
|
|
writef(' %5r', [X]).
|