का उपयोग करके अवरोही/आरोही समन्वय घोषित करने का अनुमान है, मैं एक अनुमानित, अवरोही लिखना चाहता हूं, जो घोषणा करता है कि पहला दिया गया समन्वय [y, x] दूसरे दिए गए समन्वय में उतर रहा है (बोर्ड के साथ बोर्ड की कल्पना करें [0 , 0] बाएं ऊपरी कोने पर)।परिमित डोमेन
एक Prolog में बहुत ही सरल क्रियान्वयन ऐसा दिखाई दे सकता है:
descending(B, A) :-
B = [B1,B2],
A = [A1,A2],
B1 is A1 + 1,
B2 is A2 + 1.
मैं हालांकि core.logic में यह लागू नहीं हो पाती। मैंने पहले से ही कई अलग-अलग चीजों की कोशिश की है (==/= fd/conso/appendo और + fd/+)। बातें मैंने कोशिश में से एक:
(defn descendo
[b a]
(l/fresh [b1 b2 a1 a2]
(l/== b [b1 b2])
(l/== a [a1 a2])
(l/+fd b1 1 a1)
(l/+fd b2 1 a2)))
उनमें से अधिकांश बस लौट कुछ भी नहीं है, जब उन्हें इस तरह से चल रहा है:
(l/run* [q]
(l/fresh [a]
(l/infd a (l/domain [0 0] [1 0] [0 1] [1 1]))
(descendo a [0 0])
(l/== q a)))
=>() ; expected output: ([1 1])
मैं लग रहा है कि Prolog में बहुत ज्यादा सोच अच्छा जब कोर का उपयोग नहीं है। तर्क ... किसी भी संकेत की सराहना की। अग्रिम में धन्यवाद।
संपादित करें: एक समाधान है, जहां descendo ही रहता है पाया जाता है, लेकिन जब यह चल रहा है हम एक डोमेन का उपयोग नहीं करते:
(l/run* [q]
(l/fresh [a]
(l/membero a [[0 0] [1 0] [0 1] [1 1]])
(l/membero q [[0 0] [1 0] [0 1] [1 1]])
(descendo a q)))
=> ([1 1])
मुझे यकीन है कि domain
पर इस्तेमाल किया जा करने के लिए है कि क्या नहीं कर रहा हूँ वेक्टर वैसे भी, तो यह एक समाधान नहीं हो सकता है लेकिन वास्तविक समाधान।
core.logic में एफडी केवल प्राकृतिक संख्याओं के लिए हैं, न कि वैक्टर आदि के लिए – Ankur
कृपया समाधान के रूप में अपना समाधान पोस्ट करें :-) – ordnungswidrig