Pascal's triangle: Difference between revisions

→‎{{header|Lua}}: Added a Logtalk implementation.
(→‎{{header|Lua}}: Added a Logtalk implementation.)
Line 3,992:
 
for [i 1 10] [print pascal :i]</syntaxhighlight>
 
=={{header|Logtalk}}==
Our implementation will have an object <code>pascals</code> with work done in the method <code>triangle/2</code>. We will be caching results for time efficiency at the cost of space efficiency,and the <code>reset/0</code> method will flush that cache should it grow to be a problem. The resulting object looks like this:
<syntaxhighlight lang="logtalk">
:- object(pascals).
 
:- uses(user, [succ/2]).
 
:- public(reset/0).
:- dynamic(triangle_/3).
 
reset :- retractall(triangle_(_,_,_)).
 
:- public(triangle/2).
 
triangle(N, Lines) :-
triangle(N, _, DiffLines),
difflist::as_list(DiffLines, Lines).
 
% Shortcut with cached value if it exists.
triangle(N, Line, DiffLines) :- triangle_(N, Line, DiffLines), !.
 
triangle(N, Line, DiffLines) :-
succ(N0, N),
triangle(N0, Line0, DiffLines0),
ZL = [0|Line0],
list::append(Line0, [0], ZR),
meta::map(plus, ZL, ZR, Line),
difflist::add(Line, DiffLines0, DiffLines),
asserta(triangle_(N, Line, DiffLines)).
 
triangle(1, [1], [[1]|X]-X).
 
:- end_object.
</syntaxhighlight>
 
{{Out}}
 
Using the SWI-Prolog back-end:
 
<pre>
?- {meta(loader)}. % messages elided
?- {types(loader)}. % messages elided
?- {pascals}.
% [ /home/michael/junk/pascals.lgt loaded ]
% (0 warnings)
true.
 
?- pascals::triangle(17, Ls), logtalk::print_message(banner, user, Ls).
- [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]
- [1,16,120,560,1820,4368,8008,11440,12870,11440,8008,4368,1820,560,120,16,1]
Ls = [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4|...], [1, 5, 10|...], [1, 6|...], [1|...], [...|...]|...].
 
?-
</pre>
 
=={{header|Lua}}==
34

edits