我有这个代码,它可以按照我的意愿执行,它递归地拉出给定人的父母:
(defn anc [child]
(run* [q]
(conde
[(fresh [?p]
(parento child ?p)
(?== q [child ?p]))]
[(fresh [?p ?gp]
(parento child ?p)
(parento ?p ?gp)
(?== q [ ?p ?gp]))]
[(fresh [?p ?gp ?ggp]
(parento child ?p)
(parento ?p ?gp)
(parento ?gp ?ggp)
(?== q [ ?gp ?ggp]))]
)))
问题是,对于我回去的每一代,我都必须添加一个新的测试。
有没有办法在 core.logic 中概括这一点?