6
下面是我一直堅持使用的(希望)簡單的邏輯程序。我有一個由core.logic中的邊緣關係表示的DAG,當生成父節點列表時,當我在圖中有「菱形圖形」(我不是在說這裏的循環)時,我會得到重複圖像。用core.logic列出獨特的DAG父母
有沒有什麼辦法在這種情況下生成一個明確的父母名單(通過重寫父母或類似)?
(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)
我想(:B:C:一),我想這樣做的運行*語句中(即包裝的結果在一組是不是我的目標)。
此外,向父項添加「^:tabled」似乎可以做到這一點,但我不希望這種表式引入的備忘錄。
感謝您的回覆,我一直在閱讀Bratko和google搜索,沒有發現任何直接有用的東西。你能概述你提到的「一次通過」解決方案嗎?乾杯... –
你見過這個:http://sites.google.com/site/prologsite/prolog-problems/6? – dnolen