2010-06-10 14 views
12

कीवर्ड का विज्ञापन पदानुक्रम बनाने के लिए क्लोजर की प्रणाली उन लोगों से परिचित है जिन्होंने भाषा के साथ थोडा समय बिताया है। उदाहरण के लिए, सबसे क़ौम और भाषा की प्रस्तुतियों ऐसेक्लोजर में स्वतंत्र पदानुक्रमों का कब और कैसे उपयोग किया जाना चाहिए?

(derive ::child ::parent) 

के रूप में उदाहरणों में शामिल हैं और वे यह दिखाना चाहते हैं कि यह कैसे बहु विधि प्रेषण के लिए इस्तेमाल किया जा सकता पर चलते हैं।

मैंने देखा है कि सभी स्लाइड और प्रस्तुतियों में, वे वैश्विक पदानुक्रम का उपयोग करते हैं। लेकिन (एच :: बच्चे :: अभिभावक प्राप्त) का उपयोग करके, स्वतंत्र पदानुक्रमों में कीवर्ड संबंधों को रखना संभव है, जहां एच (मेक-पदानुक्रम) द्वारा बनाया गया है। कुछ प्रश्न, इसलिए:

  • क्या यह उपयोगी या आवश्यक होने पर कोई दिशानिर्देश हैं?
  • क्या पदानुक्रमों में हेरफेर करने के लिए कोई कार्य है?

विलय विशेष रूप से उपयोगी है, इसलिए मैं इस कार्य करें:

(defn merge-h [& hierarchies] 
    (apply merge-with (cons #(merge-with clojure.set/union %1 %2) hierarchies)) 

लेकिन मैं सोच रहा था इस तरह के कार्यों को पहले से ही कहीं मौजूद है।

EDIT: "स्वतंत्र" पदानुक्रम "स्वतंत्र" पदानुक्रम में बदल गया, क्योंकि यह शब्द इस जानवर का बेहतर वर्णन करता है। इसके अलावा, मैंने कुछ शोध किया है और नीचे अपना जवाब शामिल किया है। आगे की टिप्पणियों का स्वागत है।

उत्तर

5

मैं पिछले कुछ दिनों में इस समस्या में delved है, और मुझे लगता है कि मैं कुछ जवाब: स्वतंत्र पदानुक्रम पर इस्तेमाल किया

  1. कार्य जब एक ही काम करता है वैश्विक पदानुक्रम पर उपयोग किया जाता है से अलग अर्थ विज्ञान है । करना (kwd1 kwd2 प्राप्त करें) एक साइड-इफेक्ट उत्पन्न करता है - वैश्विक पदानुक्रम में एक प्रविष्टि। दूसरी तरफ, (पदानुक्रम kwd1 kwd2 प्राप्त करें) कार्यात्मक है - फ़ंक्शन एक var को संशोधित करने के बजाय, एक नया पदानुक्रम देता है।
  2. स्वतंत्र पदानुक्रमों का उपयोग करके आप एक ही कीवर्ड के लिए कई अलग-अलग पदानुक्रम प्राप्त कर सकते हैं। तो उदाहरण के लिए:

    (डीईएफ़ बास्केटबॉल-पदानुक्रम (निकाले जाते हैं (कर-पदानुक्रम): Gretzky: जॉर्डन))

    (डीईएफ़ हॉकी-पदानुक्रम (निकाले जाते हैं (कर-पदानुक्रम): जॉर्डन: Gretzky))

इंगित कर सकता है कि: जोर्डन बास्केटबाल पदानुक्रम में अधिक है: gretzky, जबकि रिवर्स हॉकी पदानुक्रम में सच है।

इसके अलावा: गैर-नामित कीवर्ड को स्वतंत्र पदानुक्रमों में रखा जा सकता है, लेकिन वैश्विक पदानुक्रम में नहीं। तो

(derive (make-hierarchy) :a :b) 

काम करेंगे, लेकिन वैश्विक पदानुक्रम के लिए, ये कीवर्ड एक नाम स्थान में होना चाहिए था:

(derive :nspace/a :nspace/b) 

जहां NSpace कुछ नाम स्थान है। (इस नामस्थान को वास्तव में कहीं भी घोषित नहीं किया जाना चाहिए।)

संक्षेप में, स्वतंत्र पदानुक्रमों का उपयोग तब किया जाना चाहिए जब एक से अधिक पदानुक्रम की आवश्यकता हो, या जब पदानुक्रम को रन समय के दौरान व्यापक रूप से संशोधित करने की आवश्यकता हो। इसके अलावा, अगर हम नग्न खोजशब्दों के लिए पदानुक्रम चाहते हैं, तो एक स्वतंत्र पदानुक्रम की आवश्यकता है।

+0

स्पोर्ट्स उदाहरण के साथ एक चिंता यह है: (आईएसए? हॉकी-पदानुक्रम: जोर्डन: gretzky) => सच। यानी, ये प्रकार पदानुक्रम हैं। लेकिन बिंदु मान्य है: स्थानीय शब्द पदानुक्रमों को आवश्यक विभिन्न डोमेन में अलग-अलग प्रकार के रिश्ते में एक ही शब्द अलग-अलग प्रकार के हो सकते हैं। वास्तव में, मुझे हैरान है कि हमें वैश्विक पदानुक्रम के साथ गड़बड़ करने की इजाजत है। – kennytilton

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

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