-- | -- Module : BusquedaEnEspaciosDeEstados -- Description : El patrón de búsqueda en espacios de estados. -- License : Creative Commons -- Maintainer : José A. Alonso -- -- = El patrón de búsqueda en espacios de estados -- -- Las características de los problemas de espacios de estados son: -- -- * un conjunto de las posibles situaciones o nodos que constituye -- el espacio de estados; estos son las potenciales soluciones que se -- necesitan explorar; -- * un conjunto de movimientos de un nodo a otros nodos, llamados los -- sucesores del nodo; -- * un nodo inicial; -- * un nodo objetivo, que es la solución. -- -- Este módulo contiene la definición del patrón de búsqueda en espacios -- de estados estudiado en el del -- curso. Además, en el tema se incluye dos casos de aplicación del patrón: -- -- * y -- * . module I1M.BusquedaEnEspaciosDeEstados (buscaEE) where -- --------------------------------------------------------------------- -- Importaciones -- -- --------------------------------------------------------------------- import I1M.Pila -- --------------------------------------------------------------------- -- Descripción de los problemas de espacios de estados -- -- --------------------------------------------------------------------- -- Las características de los problemas de espacios de estados son: -- * un conjunto de las posibles situaciones o nodos que constituye -- el espacio de estados; estos son las potenciales soluciones que se -- necesitan explorar; -- * un conjunto de movimientos de un nodo a otros nodos, llamados los -- sucesores del nodo; -- * un nodo inicial; -- * un nodo objetivo, que es la solución. -- --------------------------------------------------------------------- -- El patrón de búsqueda en espacios de estados -- -- --------------------------------------------------------------------- -- Nota: Se supone que el grafo implícito de espacios de estados es -- acíclico. -- | (buscaEE s o e) es la lista de soluciones del problema de espacio de -- estado definido por la función sucesores (s), el objetivo (o) y el -- estado inicial (e). buscaEE:: (Eq nodo) => (nodo -> [nodo]) -- sucesores -> (nodo -> Bool) -- esFinal -> nodo -- nodo actual -> [nodo] -- soluciones buscaEE sucesores esFinal x = busca' (apila x vacia) where busca' p | esVacia p = [] | esFinal (cima p) = cima p : busca' (desapila p) | otherwise = busca' (foldr apila (desapila p) (sucesores (cima p)))