In D, the numbers increase, but not in any predictable fashion. They might be, say, the distance of each point from Carfax.
For each of these, try to write a predicate called
which, given the input argument Here, returns in Next the following
place in the sequence, i.e. if you ask
next_place(brasenose,Next). then Next
all_souls. If you can't see a way fairly quickly, then
leave that part: there may not be one.
Now, consider the four representations again. For each, write out a new
set of clauses describing the street without Brasenose (not a bad idea
anyway). That is, remove whichever clause(s) define(s) it, such that the
remaining clauses still represent a connected map, and so that
Next write out a new set of clauses for each so that they describe the
street with a new point added, say The Body Shop. Again,
still work on these new clauses.
Finally, for each of the four representations, try writing the predicate
nth_point(N,P), which is given a number N as input, and which sets P
to the Nth point in the sequence. Thus,
nth_point(2,P). should set P
brasenose. Again, if you can't see fairly quickly how to do it,
leave that part.