46 lines
1 KiB
Text
46 lines
1 KiB
Text
with javascript_semantics
|
|
enum RID, I, SAMPLE
|
|
|
|
function s_of_n(sequence env, integer item)
|
|
integer i = env[I] + 1,
|
|
n = length(env[SAMPLE])
|
|
env = deep_copy(env)
|
|
env[I] = i
|
|
if i<=n then
|
|
env[SAMPLE][i] = item
|
|
elsif n/i>rnd() then
|
|
env[SAMPLE][rand(n)] = item
|
|
end if
|
|
return env
|
|
end function
|
|
|
|
function s_of_n_creator(int n)
|
|
return {s_of_n,0,repeat(0,n)}
|
|
end function
|
|
|
|
function invoke(sequence env, args)
|
|
env = call_func(env[RID],prepend(deep_copy(args),env))
|
|
return env
|
|
end function
|
|
|
|
function test(integer n, sequence items)
|
|
sequence env = s_of_n_creator(n)
|
|
for item in items do
|
|
-- env = s_of_n(env,item)
|
|
env = invoke(env,{item})
|
|
end for
|
|
return env[SAMPLE]
|
|
end function
|
|
|
|
procedure main()
|
|
sequence items_set = tagset(9,0)
|
|
sequence frequencies = repeat(0,length(items_set))
|
|
for i=1 to 100000 do
|
|
sequence res = test(3, items_set)
|
|
for fdx in res do
|
|
frequencies[fdx+1] += 1
|
|
end for
|
|
end for
|
|
?frequencies
|
|
end procedure
|
|
main()
|