es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comprendiendo los tipos de datos y constructores de Haskell (específicamente cuando se utiliza otro tipo de datos dentro de un tipo de datos).

Como tarea se nos han dado estos tipos de datos, y necesito hacer una función que tome una fila ([Cell]) y devuelva Jugador X, Jugador O o Nada dependiendo de la fila.

module TicTacToe where
import Data.Maybe

data Player = X | O deriving Eq
data Cell = E | P Player deriving Eq
data State = Running | GameOver (Maybe Player) deriving Eq

type Size = Int
type Board = [[Cell]]
type Game = (Size, Board, Player, State)

Mi comprensión es que el tipo de dato Cell puede tener 2 valores: E o P que es un tipo de dato Player. Ahora no entiendo cuál es el problema porque head c será o E o un Player, así que lo comparo con E y un Jugador X y O.

Si la primera Cell está vacía (E) entonces sabemos que nadie ganó y podemos devolver Nada. Si es un Jugador entonces comprobamos que todas las demás Cell también sean de ese jugador. Si es así, gana X o O, de lo contrario Nada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La tarea consiste en crear una función whoWonOnRow que tome como entrada una fila ([Cell]) y devuelva Player X, Player O, o Nothing dependiendo de si uno de los jugadores ha ganado o no.

    El tipo de datos Cell puede tener dos valores, E o P Player, donde Player también es un tipo de datos definido como X o O. El tipo de datos State está definido como Running o GameOver (Maybe Player).

    La función whoWonOnRow verifica el primer elemento en la fila (head c). Si está vacío (E) y todas las demás celdas en la fila también son E, entonces nadie ha ganado, y la función devuelve Nothing. Si la primera celda es un jugador (P X o P O) y todas las demás celdas en la fila son iguales, entonces ese jugador ha ganado, y la función devuelve Just (head c), que es o bien Player X o Player O. Si ninguna de estas condiciones se cumple, la función devuelve Nothing.

Comments are closed.