Van der Corput sequence
editable example
Click the pencil to open this in an editor, change it, and run it in your browser. The same solution is posted on Rosetta Code.
ghul
use IO.Std.write_line
use Collections
use Ghul.Pipes
van_der_corput(n: int, base: int) -> double pure => (
let rest mut = n
let weight mut = 1.0D / cast(base)
let term mut = 0.0D
while rest > 0 do
term = term + cast(rest % base) * weight
rest = rest / base
weight = weight / cast(base)
od
term
)
let base_2 = (0::9) |> map(n => "{van_der_corput(n, 2)}") |> join(", ")
write_line("base 2: {base_2}")
for base in 3::5 do
let terms = LIST()
for n in 0::9 do
terms.add("{van_der_corput(n, base):F4}")
od
write_line("base {base}: {terms |> join(", ")}")
od