get_worlds(File, NWorlds, Worlds) :- load_clauses(File, Clauses), get_worlds(File, 1, NWorlds, Clauses, [], Worlds). get_worlds(_, I, N, _, Worlds, Worlds):- I>N. get_worlds(File, I, NWorlds, Clauses, PreWorlds, Worlds) :- get_world(Clauses, I, World), NewWorld=[World|PreWorlds], I1 is I+1, get_worlds(File, I1, NWorlds, Clauses, NewWorld, Worlds). get_world(Clauses, WorldNr, World) :- create_world(WorldNr, Clauses, W), World=world(W). create_world(_, [], []). create_world(N, [begin(N)|Clauses], World) :- create_world(N, Clauses, [], World). create_world(N, [_|Clauses], World) :- create_world(N, Clauses, World). create_world(N, [Head|Clauses], PreWorld, World) :- NWorld=[Head|PreWorld], create_world(N, Clauses, NWorld, World). create_world(N, [end(N)|_], World, RWorld) :- reverse(World, RWorld).