Jogo da velha em Prolog

Bom pessoal fiz um jogo da velha em Prolog,Gostaria de saber se minha lógica está correta e o que poderia melhorar.Agradeceria muitíssimo desde já quem pudesse me corrigir.O jogo segue este estilo (posições determinadas de A a I
|X|b|c|
|d|X|f|
|g|h|X|

domains
	n= symbol
	c=integer
	tbl=n*
predicates
	jogar(n,n,tbl).vitoria(tbl,n).mostra(tbl).empate(c)
clauses
	vitoria(tbl,x):- write("Jogador X ganhou!")
	vitoria(tbl,o):- write("Jogador O ganhou!")
	empate(c):- write("O jogo empatou!")
	("Jogar X em posicao="),readln(p),jogar(simb,p,tbl,c),mostra(tbl)
	("Jogar Y em posicao="),readln(p),jogar(simb,p,tbl,s),mostra(tbl)

/*mostra tabuleiro no momento*/
	mostra([a,b,c,d,e,f,g,h,i]):-write([a,b,c]),nl,write([d,e,f]),nl,write([g,h,i])

/*8 vitorias diferentes possiveis*/
	vitoria(tbl,simb):- tbl=[simb,simb,simb,_,_,_,_,_,_];
	vitoria(tbl,simb):- tbl=[_,_,_,simb,simb,simb,_,_,_];
	vitoria(tbl,simb):- tbl=[_,_,_,_,_,_,simb,simb,simb];

	vitoria(tbl,simb):- tbl=[simb,_,_,simb,_,_,simb,_,_];
	vitoria(tbl,simb):- tbl=[_,simb,_,_,simb,_,_,simb,_];
	vitoria(tbl,simb):- tbl=[_,_,simb,_,_,simb,_,_,simb];

	vitoria(tbl,simb):- tbl=[simb,_,_,_,simb,_,_,_,simb];
	vitoria(tbl,simb):- tbl=[_,_,simb,_,simb,_,simb,_,_];


/*9 jogadas possiveis de x*/
	jogar(x,a,tbl,c):- tbl=[x,_,_,_,_,_,_,_,_],s=c+1.
	jogar(x,b,tbl,c):- tbl=[_,x,_,_,_,_,_,_,_],s=c+1.
	jogar(x,c,tbl,c):- tbl=[_,_,x,_,_,_,_,_,_],s=c+1.
	jogar(x,d,tbl,c):- tbl=[_,_,_,x,_,_,_,_,_],s=c+1.
	jogar(x,e,tbl,c):- tbl=[_,_,_,_,x,_,_,_,_],s=c+1.
	jogar(x,f,tbl,c):- tbl=[_,_,_,_,_,x,_,_,_],s=c+1.
	jogar(x,g,tbl,c):- tbl=[_,_,_,_,_,_,x,_,_],s=c+1.
	jogar(x,h,tbl,c):- tbl=[_,_,_,_,_,_,_,x,_],s=c+1.
	jogar(x,i,tbl,c):- tbl=[_,_,_,_,_,_,_,_,x],s=c+1.

/*9 jogadas possiveis de o*/
	jogar(o,a,tbl,s):- tbl=[o,_,_,_,_,_,_,_,_],c=s+1.
	jogar(o,b,tbl,s):- tbl=[_,o,_,_,_,_,_,_,_],c=s+1.
	jogar(o,c,tbl,s):- tbl=[_,_,o,_,_,_,_,_,_],c=s+1.
	jogar(o,d,tbl,s):- tbl=[_,_,_,o,_,_,_,_,_],c=s+1.
	jogar(o,e,tbl,s):- tbl=[_,_,_,_,o,_,_,_,_],c=s+1.
	jogar(o,f,tbl,s):- tbl=[_,_,_,_,_,o,_,_,_],c=s+1.
	jogar(o,g,tbl,s):- tbl=[_,_,_,_,_,_,o,_,_],c=s+1.
	jogar(o,h,tbl,s):- tbl=[_,_,_,_,_,_,_,o,_],c=s+1.
	jogar(o,i,tbl,s):- tbl=[_,_,_,_,_,_,_,_,o],c=s+1.
	jogar(_,_,tbl,s):- write('Movimento nao permitido')

/*caso de empate se o tabuleiro estiver cheio(9 jogadas) e sem vitoria*/ 
	empate(c):- c>8.
	empate(c):- s>8
goal
	jogar(x,_,[a,b,c,d,e,f,g,h,i],0) /*inicia o jogo com jogador x,tabuleiro vazio e contador de jogadas zerado*/