के साथ अद्वितीय डीएजी माता-पिता को सूचीबद्ध करना यहां एक (उम्मीद है) सरल लॉजिकल प्रोग्राम है जिसे मैं थोड़ी देर के लिए अटक गया हूं।core.logic
मेरे पास कोर.लॉगिक में किनारे के संबंध में प्रतिनिधित्व किया गया है, जब मूल नोड्स की सूची उत्पन्न करते हैं, तो मुझे ग्राफ में "हीरा आकार" होने पर डुप्लिकेट मिलते हैं (मैं यहां चक्रों के बारे में बात नहीं कर रहा हूं)।
क्या इस मामले में माता-पिता की एक अलग सूची उत्पन्न करने का कोई तरीका है (माता-पिता को फिर से लिखकर) या? (: ख: सी: एक)
(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)
मैं प्राप्त करना चाहते हैं और मैं रन * बयान के अंदर करना चाहते हैं (अर्थात एक सेट में परिणाम लपेटकर नहीं है कि मैं क्या कर रहा हूँ के लिए लक्ष्य है)।
इसके अलावा, पेरेंटो को "^: tabled" जोड़ना चाल चल रहा है, लेकिन मैं नहीं चाहता कि ज्ञापन पेश किया जाए।
उत्तर के लिए धन्यवाद, मैं ब्रेटको पढ़ रहा हूं और थोड़ा गुगल रहा हूं और कुछ भी उपयोगी नहीं पाया। क्या आप उल्लेख किए गए 'एक पास' समाधान की रूपरेखा कर सकते हैं? चीयर्स ... –
क्या आपने इसे देखा है: http://sites.google.com/site/prologsite/prolog-problems/6? – dnolen