Polynomial synthetic division: Difference between revisions
Content added Content deleted
(→{{header|Haskell}}: added solution) |
(→{{header|Haskell}}: changed to less cryptic non-monadic solution) |
||
Line 348: | Line 348: | ||
=={{header|Haskell}}== |
=={{header|Haskell}}== |
||
<lang haskell>import |
<lang haskell>import Data.List |
||
normalized :: (Eq a, Num a) => [a] -> [a] |
normalized :: (Eq a, Num a) => [a] -> [a] |
||
Line 359: | Line 359: | ||
shortDiv p1 p2 |
shortDiv p1 p2 |
||
| isZero p2 = error "zero divisor" |
| isZero p2 = error "zero divisor" |
||
| otherwise = |
| otherwise = |
||
let go 0 p = p |
|||
⚫ | |||
in splitAt k $ go k p1 |
|||
where |
where |
||
k = length p1 - length as |
|||
a:as = normalized p2 |
a:as = normalized p2 |
||
⚫ | |||
ker = negate <$> (as ++ repeat 0)</lang> |
ker = negate <$> (as ++ repeat 0)</lang> |
||
Line 380: | Line 383: | ||
| isZero p2 = error "zero divisor" |
| isZero p2 = error "zero divisor" |
||
| not (isMonic p2) = error "divisor is not monic" |
| not (isMonic p2) = error "divisor is not monic" |
||
| otherwise = |
| otherwise = |
||
let go 0 p = p |
|||
⚫ | |||
in splitAt k $ go k p1 |
|||
where |
where |
||
k = length p1 - length as |
|||
_:as = normalized p2 |
|||
⚫ | |||
ker = negate <$> as ++ repeat 0</lang> |
ker = negate <$> as ++ repeat 0</lang> |
||