2013-02-20 35 views
5

में विशिष्ट fd/distinct का उपयोग करने का क्या फायदा है, जहां तत्व distincto के बजाय एक सीमित डोमेन में होंगे?originalolog. fd/core.logic

निम्नलिखित सभी ([0 1] [1 0]) पर लौटें।

;;; With distincto 
(run* [q] 
    (fresh [x y] 
    (fd/in x y (fd/interval 1)) 
     (distincto [x y]) 
     (== q [x y]))) 

;;; With fd/distinct 
(run* [q] 
    (fresh [x y] 
    (fd/in x y (fd/interval 1)) 
     (fd/distinct [x y]) 
     (== q [x y]))) 

;;; Without fd at all. 
(let [interval [0 1]] 
    (run* [q] 
    (fresh [x y] 
     (membero x interval) 
     (membero y interval) 
     (distincto [x y]) 
     (== q [x y])))) 

विशेष रूप से, हालांकि ऐसा लगता है कि आप किसी भी जगह में distincto उपयोग कर सकते हैं जहां fd/distinct (लेकिन दूसरी तरह के आसपास) का उपयोग कर सकते हैं, एक ही membero और fd/in के लिए नहीं कहा जा सकता है।

उत्तर

3

fd/distinctdistincto से अधिक अनुकूलित है जो किसी भी प्रकार का मान प्राप्त करना चाहिए। हुड के तहत fd/distinct सेटों का उपयोग कर एक बार में बाधित चर के कुशल प्रतिनिधित्व के साथ सौदों, सौदों distincto एक बहुत ही सरल तरीके से रोगी ऑपरेटर != का उपयोग करता है।

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

  • कोई संबंधित समस्या नहीं^_^