私は私が望むように行うこのコードを持っています、それは与えられた人の両親を再帰的に引っ張ります:
(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で一般化する方法はありますか?