Horner's rule for polynomial evaluation: Difference between revisions
Horner's rule for polynomial evaluation (view source)
Revision as of 18:30, 12 May 2022
, 2 years ago→{{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>▼
<lang Picat>horner2(Coeff, X, V) => ▼
Acc = 0,▼
foreach(I in Coeff.length..-1..1) ▼
Acc := Acc*X + Coeff[I]▼
end,▼
V = Acc.</lang>▼
<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}}
▲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>
<pre>128
128
128</pre>
=={{header|PicoLisp}}==
|