Horner's rule for polynomial evaluation: Difference between revisions

→‎{{header|Picat}}: Split into subsections. Added {{out}}
(avoid double assignment, 0-based indexing is easier to understand)
(→‎{{header|Picat}}: Split into subsections. Added {{out}})
Line 1,592:
 
=={{header|Picat}}==
===Recursion===
<lang Picat>horner([],_X,0).
horner([H|T],X,V) :-
horner(T,X,V1),
V = V1 * X + H.</lang>
 
% ===Iterative version===
<lang Picat>horner2(Coeff, X, V) =>
Acc = 0,
foreach(I in Coeff.length..-1..1)
Acc := Acc*X + Coeff[I]
end,
V = Acc.</lang>
 
% ===Functional approach===
<lang Picat>h3(X,A,B) = A+B*X.
horner3(Coeff, X) = fold($h3(X),0,Coeff.reverse()).</lang>
 
===Test===
<lang Picat>go =>
horner([-19, 7, -4, 6], 3, V),
Line 1,601 ⟶ 1,620:
V3 = horner3([-19, 7, -4, 6], 3),
println(V3),
nl.</lang>
 
{{out}}
% Prolog style
horner([],_X,0).
horner([H|T],X,V) :-
horner(T,X,V1),
V = V1 * X + H.
 
% Iterative version
horner2(Coeff, X, V) =>
Acc = 0,
foreach(I in Coeff.length..-1..1)
Acc := Acc*X + Coeff[I]
end,
V = Acc.
 
% Functional approach
h3(X,A,B) = A+B*X.
horner3(Coeff, X) = fold($h3(X),0,Coeff.reverse()).</lang>
 
Output:
<pre>128
128
128</pre>
 
 
=={{header|PicoLisp}}==
495

edits