Este es un (afortunadamente) programa lógico simple con el que me he quedado atrapado por un tiempo.Listado de padres únicos de DAG con core.logic
Tengo un DAG representado por una relación de borde en core.logic, al generar la lista de nodos principales, obtengo duplicados cuando tengo "formas de diamante" en el gráfico (no estoy hablando de ciclos aquí).
¿Hay alguna manera de generar una lista distinta de padres en este caso (volviendo a escribir parento o similar)?
(defrel edge a b)
(fact edge :a :b)
(fact edge :a :c)
(fact edge :b :d)
(fact edge :c :d)
(defne parento [x y]
([x y] (edge y x))
([x y] (fresh [z]
(edge z x)
(parento z y))))
(run* [q] (parento :d q))
;; => (:b :c :a :a)
quiero conseguir (: b: c: a) y yo quiero hacerlo dentro de la instrucción de ejecución * (es decir, envolviendo el resultado en un conjunto no es lo que estoy apuntando para lo es).
Además, agregar "^: tabled" a parento parece ser el truco, pero no quiero que la memoria que presentó presenta.
Gracias por la respuesta, he estado leyendo Bratko y buscando en Google un poco y no he encontrado nada directamente útil. ¿Puedes delinear la solución de "una pasada" que mencionaste? Saludos ... –
¿Has visto esto: http://sites.google.com/site/prologsite/prolog-problems/6? – dnolen