(phixonline)--> with javascript_semantics constant tasklist = new_dict() procedure add_task(integer priority, string desc) integer k = getd_index(priority,tasklist) if k=0 then putd(priority,{desc},tasklist) else sequence descs = getd_by_index(k,tasklist) putd(priority,append(descs,desc),tasklist) end if end procedure function list_task_visitor(integer priority, sequence descs, integer /*user_data*/) ?{priority,descs} return true -- continue end function procedure list_tasks() traverse_dict(list_task_visitor, 0, tasklist, true) end procedure function pop_task_visitor(integer priority, sequence descs, integer rid) string desc = descs[1] descs = descs[2..$] if length(descs)=0 then deld(priority,tasklist) else putd(priority,descs,tasklist) end if rid(priority,desc) return false -- stop end function procedure pop_task(integer rid) if dict_size(tasklist)!=0 then traverse_dict(pop_task_visitor, rid, tasklist, true) end if end procedure add_task(3,"Clear drains") add_task(4,"Feed cat") add_task(5,"Make tea") add_task(1,"Solve RC tasks") add_task(2,"Tax return") procedure do_task(integer priority, string desc) ?{priority,desc} end procedure list_tasks() ?"===" pop_task(do_task) ?"===" list_tasks()