export function world_update(world, postprocess=[]) { const lattice_props = lattice_update(world.lattice, world.lattice_rules); const intermediate_lattice = lattice_apply(world.lattice, lattice_props); const agent_props = world.agents .map(a => agent_decide(world.lattice, agent, world.senses, world.actions)) .flat() .reduce((acc, prop) => proposal_merge(acc, prop), []) .filter(prop => lattice_valid(intermediate_lattice, prop)) const lattice = lattice_apply(intermediate_lattice, agent_props); const agents = world.agents.map(a => agent_apply(a, agent_props)); const world = {...world, lattice, agents}; return postprocess.reduce( (acc, f) => f(acc), world ); }