Bernoulli numbers: Difference between revisions
m
Haskell :: Derivation from Faulhaber's triangle – Tidied
(Marked as incorrect.) |
m (Haskell :: Derivation from Faulhaber's triangle – Tidied) |
||
Line 1,797:
====Derivation from Faulhaber's triangle====
<lang haskell>import Data.
import Data.
-------------------- BERNOULLI NUMBERS -------------------
bernouillis :: Integer -> [Rational]
bernouillis =
fmap head
. tail
. scanl faulhaber []
. enumFromTo 0
faulhaber :: [Ratio Integer] -> Integer -> [Ratio Integer]
faulhaber rs n =
(:) =<< (-) 1 . sum $
zipWith ((*) . (n %)) [2 ..] rs
-
main :: IO ()
main = do
Line 1,819 ⟶ 1,827:
(filter ((0 /=) . snd) $ zip [0 ..] xs)
-
fTable ::
String ->
(a -> String) ->
(b -> String) ->
(a -> b) ->
[a] ->
String
fTable s xShow fxShow f xs =
let w = maximum (length . xShow <$> xs)
in unlines $
s :
s : fmap (((++) . rjust w ' ' . xShow) <*> ((" -> " ++) . fxShow . f)) xs▼
fmap
( ((<>) . rjust w ' ' . xShow)
)
xs
showRatio :: Int -> Rational -> String
showRatio w r =
let d = denominator r
in rjust w ' '
<> bool [] (" / " <> show d) (1 /= d)
rjust :: Int -> a -> [a] -> [a]
rjust n c = drop . length <*> (replicate n c
{{Out}}
<pre>Bernouillis from Faulhaber triangle:
|