Heronian triangles: Difference between revisions

Content added Content deleted
(→‎{{header|Logtalk}}: Modified test code to eliminate an unnecessary helper predicate by using a lambda expression.)
(→‎{{header|Logtalk}}: Used aliases to clean up some of the clutter in reading the test object.)
Line 3,032:
:- object(test_triangle).
 
% define an aliasaliases for simpler output clausesreading
:- uses(list, [length/2 as length/2,
member/2 as member/2,
sort/3 as sort/3,
take/3 as take/3]).
:- uses(logtalk, [print_message(information, heronian, Message) as print(Message)]).
 
Line 3,040 ⟶ 3,044:
 
gather_primitive_heronians(Primitives),
list::length(Primitives, L),
print('There are ~w primitive Heronian triangles with sides under 200.~n'+[L]),
 
list::sort(order_by_area, Primitives, AreaSorted),
list::take(10, AreaSorted, Area10),
print(@'The first ten found, ordered by area, are:\n'),
display_each_element(Area10),
 
list::sort(order_by_perimeter, Primitives, PerimeterSorted),
list::take(10, PerimeterSorted, Perimeter10),
print(@'The first ten found, ordered by perimeter, are:\n'),
display_each_element(Perimeter10),
 
bagof(Element, {Element, Primitives}/(list::member(Element, Primitives), Element = t(_,_,_,210.0,_)), Area210),
% use a lambda expression to reduce the noise of silly little helper predicates
bagof(Element, {Element, Primitives}/(list::member(Element, Primitives), Element = t(_,_,_,210.0,_)), Area210),
print(@'The list of those with an area of 210 is:\n'),
display_each_element(Area210).
Line 3,077 ⟶ 3,080:
gather_primitive_heronians(Primitives) :-
bagof(
(t(A, B, C, Area, Perimeter)),
(
between(3, 200, A),
Line 3,107 ⟶ 3,110:
order_by_sides(>, _, _).
 
:- end_object.
:- end_object.
</syntaxhighlight>