Jump to content

Pascal's triangle: Difference between revisions

m (→‎Combinations: minor corrections)
Line 892:
(prinl) ) )</lang>
 
=={{header|Prolog}}==
Difference-lists are used to make quick append.
<lang 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]).
</lang>
 
Output :
<lang Prolog> ?- pascal(15).
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
true.
</lang>
=={{header|PureBasic}}==
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.