Pascal's triangle: Difference between revisions
Content added Content deleted
m (→Combinations: minor corrections) |
|||
Line 892: | Line 892: | ||
(prinl) ) )</lang> |
(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}}== |
=={{header|PureBasic}}== |
||