torneoIdaYVueltaConCondicionesYArbitros(Equipos, Conds, Arbitros, Torneo).
Verdadero cuando Torneo es un torneo de ida y vuelta para los equipos de Equipos, respetando las restricciones en Conds (condiciones) y dirigido por árbitros de Árbitros.
El torneo resultante tendrá entonces n−1 fechas, donde n es la cantidad de equipos.
La estructura resultante es:
torneo(apertura(FechasLocales), clausura(FechasVisitantes))
donde las FechasVisitantes son el “espejo” de FechasLocales.
Recordar que dos fechas son consideradas iguales si tienen el mismo número y los mismos partidos, no importa en qué orden y con qué repeticiones.
Asignación de arbitros:
Para solucionar el tema de la asignación de árbitros debemos definir un predicado
fechaConArbitros(Arbitros, Fecha, FechaConArbitros)
verdadero cuando FechaConArbitros es una fecha igual a Fecha a la que se han asignado árbitros distintos tomados del conjunto Árbitros. Los elementos de FechaConArbitros serán de la estructura dirigido(partido, arbitro), donde Partido es un partido de Fecha.
Ejemplo:
?- fechaConArbitros([gimenez, pezzota, beligoy],
fecha(1, [partido(boca, river),partido(racing, velez)]),
Fecha).
Fecha = fecha(1, [dirigido(gimenez, partido(boca, river)),
dirigido(pezzota, partido(racing, velez))]) ;
Fecha = fecha(1, [dirigido(gimenez, partido(boca, river)),
dirigido(beligoy, partido(racing, velez))]) ;
Fecha = fecha(1, [dirigido(pezzota, partido(boca, river)),
dirigido(gimenez, partido(racing, velez))]) ;
Fecha = fecha(1, [dirigido(pezzota, partido(boca, river)),
dirigido(beligoy, partido(racing, velez))]) ;