2015-01-16 4 views
5

में उपयोग के लिए मैं आज इस clojure समस्या की खोज की। यदि सेट में कोई भी मान सेट नहीं है, तो यह अंतिम मान देता है। समस्या यह है कि contains? फ़ंक्शन पहले संग्रह लेता है और फिर कुंजी और condp को पहले कुंजी की आवश्यकता होती है।क्लोजर: इसमें पैरामीटर को उलटना शामिल है?</p> <pre><code>(condp contains? some-set "foo" "foo's in thar" "bar" "bar's in thar" "t'aint thar") </code></pre> <p>विचार पहला मैच जहां <code>some-set</code> कोई मान के तहत स्ट्रिंग वापस जाने के लिए है: condp

(defn reverse-params [f] (fn [a b] (f b a)) 

और इसे करने के लिए एक फोन प्रतिस्थापन:

मैं एक समारोह लिख कर "तय" यह

(condp (reverse-params contains?) some-set 
    "foo" "foo's in thar" 
    "bar" "bar's in thar" 
    "t'aint thar") 

कौन सा काम करता है, लेकिन मेरे सवाल का मैं क्या करने के लिए कुछ बेहतर तरीका याद आ रही है यह (शायद some का उपयोग करके)? मैं cond का उपयोग कर सकता था लेकिन मुझे लगा कि इस तरह से मुझे कुछ टाइपिंग बचाती है।

+4

'रिवर्स-पैराम्स' फ़ंक्शन के लिए सामान्य नाम ['flip'] (https://gist.github.com/micmarsh)/bcbe19c9de8bb7a471bf) – noisesmith

उत्तर

8

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

(condp #(contains? %2 %1) some-set 
    "foo" "foo's in thar" 
    "bar" "bar's in thar" 
    "t'aint thar") 

यह समस्या भी जब -> और ->> मैक्रो के साथ बातें सूत्रण ऊपर आता है। उन मामलों में मैं अक्सर as-> मैक्रो का उपयोग थ्रेड किए गए मान को

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