2012-09-10 13 views
29

का उपयोग करके अवरोही/आरोही समन्वय घोषित करने का अनुमान है, मैं एक अनुमानित, अवरोही लिखना चाहता हूं, जो घोषणा करता है कि पहला दिया गया समन्वय [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 पर इस्तेमाल किया जा करने के लिए है कि क्या नहीं कर रहा हूँ वेक्टर वैसे भी, तो यह एक समाधान नहीं हो सकता है लेकिन वास्तविक समाधान।

+1

core.logic में एफडी केवल प्राकृतिक संख्याओं के लिए हैं, न कि वैक्टर आदि के लिए – Ankur

+7

कृपया समाधान के रूप में अपना समाधान पोस्ट करें :-) – ordnungswidrig

उत्तर

0

एक समाधान है, जहां 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]) 

मुझे यकीन है कि डोमेन वैक्टर पर वैसे भी इस्तेमाल किया जा करने के लिए है कि क्या नहीं कर रहा हूँ, इसलिए यह एक समाधान नहीं बल्कि वास्तविक समाधान हो सकता है।

संबंधित मुद्दे