I1M-0.0.1: src/I1M/BusquedaPrimeroElMejor.hs
-- |
-- Module : BusquedaPrimeroElMejor
-- Description : El patrón de búsqueda por primero el mejor.
-- License : Creative Commons
-- Maintainer : José A. Alonso
--
-- = El patrón de búsqueda por primero el mejor
--
-- Este módulo contiene la definición del patrón de búsqueda por primero
-- el mejor estudiado en el <http://bit.ly/1IstIjL tema 15> del
-- curso.
--
-- Además, en el tema se incluye como de aplicación del patrón el
-- <http://bit.ly/1IstOI7 problema del 8-puzzle>.
module I1M.BusquedaPrimeroElMejor (buscaPM) where
-- ---------------------------------------------------------------------
-- Importaciones --
-- ---------------------------------------------------------------------
import I1M.ColaDePrioridad
-- ---------------------------------------------------------------------
-- Búsqueda por primero el mejor --
-- ---------------------------------------------------------------------
-- | (buscaPM 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), obtenidas buscando por primero el mejor.
buscaPM :: (Ord nodo) =>
(nodo -> [nodo]) -- sucesores
-> (nodo -> Bool) -- esFinal
-> nodo -- nodo actual
-> [nodo] -- solución
buscaPM sucesores esFinal x = busca' (inserta x vacia)
where
busca' c
| esVacia c = []
| esFinal (primero c) = primero c : busca' (resto c)
| otherwise = busca' (foldr inserta (resto c) (sucesores (primero c)))