There is indeed a problem with the furthest predicate: it should not return several answers when you hit semi-colon.  This may create problems later on when prolog backtracks.  The solution is to make sure that the two clauses defining furthest are mutually exclusive.  In other words, an atom with furthest should only be matched by either one of the two clauses but not both.  Intuitively, the first clause is the recursive call and it is only matched when we haven't reached the last position of the desired color.  The second clause is the base case so it should only be matched when the last position of the desired color is matched.  Unfortunately, the second clause matches all positions not just the last one.  Here are two possible solutions:

1) (Previously proposed by Q. Dinh) add new conditions to the second clause so that it is only matched when the last position is reached:

furthest(Dir,State,Pos,Color,FurthestPos):-
        getDisc(Pos,State,Color),
        nextPos(Dir,Pos,NextPos),
        furthest(Dir,State,NextPos,Color,FurthestPos).
furthest(Dir,State,Pos,Color,Pos):-
        getDisc(Pos,State,Color),
        nextPos(Dir,Pos,NextPos),
        getDisc(NextPos,State,NextColor),
        NextColor \= Color.

2) (If you are familiar with the "!" operator) add a cut "!" at the end of the first clause. This prevents prolog from backtracking after matching the first clause so it won't attempt to match the second clause:

furthest(Dir,State,Pos,Color,FurthestPos):-
        getDisc(Pos,State,Color),
        nextPos(Dir,Pos,NextPos),
        furthest(Dir,State,NextPos,Color,FurthestPos),!.
furthest(Dir,State,Pos,Color,Pos):-
        getDisc(Pos,State,Color).

Sorry for the confusion.  The file othello.P has now been corrected.