win(X, X, X).
winRow([X1, X2, X3|Tail]):- win(X1, X2, X3); winRow(Tail).
winCross([ 
    X, _, _,
    _, X, _,
    _, _, X]).
winCross([ 
    _, _, X,
    _, X, _,
    X, _, _]).
winColumn([ 
    X, _, _,
    X, _, _,
    X, _, _]).
winColumn([ 
    _, X, _,
    _, X, _,
    _, X, _]).
winColumn([ 
    _, _, X,
    _, _, X,
    _, _, X]).

win(X):- winRow(X); winCross(X); winColumn(X).

/** <examples>

?- win([
  x, -, o,
  o, x, o,
  x, -, X
  ]).
*/