2012-04-09 13 views
5

मुझे पता है कि घोंसले #,% बुरा है - हालांकि, मैं अक्सर अपने आप को छोटा, ऑनलाइन अनाम प्रक्रियाएं कि '# /% s के ठीक 2 स्तरों होने समाप्त होता है लेखन।# की नेस्टिंग/clojure मैक्रो में%

इस प्रकार, मैं उत्सुक हूँ, वहाँ एक रास्ता clojure कुछ जहां प्रत्येक% के सबसे नजदीक (छोटी संलग्न) # बाध्य है बताने के लिए है?

धन्यवाद!

+1

मैं दो बार यह पढ़ के रूप में एक ही बात करता है: इसके अलावा, अगर आप mapfn बहुत कुछ के साथ प्रयोग करते हैं, (मेरी राय में स्पष्ट देखने के लिए जो करते हैं) के बजाय for उपयोग करने पर विचार लेकिन यह समझ में नहीं आता कि आपका प्रश्न क्या है। क्या आप इसे स्पष्ट कर सकते हैं? इससे आपको अधिक उपयोगी उत्तर प्राप्त करने में मदद मिलेगी। –

उत्तर

6

गुमनाम कार्यों की नेस्टिंग clojure में समर्थित नहीं है।

संपादित करें: द्वारा "अनाम प्रक्रियाएं" मैं #(...), नहीं (fn ...) मतलब है। भ्रम के लिए माफ़ी।

+5

'(((एफएन [एक्स] (एफएन [वाई] [एक्स वाई])) 1) 2)' – danlei

+5

जो डैनली शो के रूप में सही नहीं है। # (...) गुमनाम कार्यों के लिए पाठक मैक्रो की नेस्ट उपयोग समर्थित नहीं है; 'एफएन' का उपयोग कर घोंसला ठीक है। – Gert

+2

हाँ, निश्चित रूप से। मेरी टिप्पणी पाठक मैक्रो पर निर्देशित की गई थी, जो सवाल का विषय था। –

8

अनाम प्रक्रियाएं नेस्ट करने के बाद बिल्कुल ठीक है। आपको बस गैर-शॉर्टैंड सिंटैक्स का उपयोग करना होगा।

#(foo (bar %1) 
     (baz %2)) 

(fn [x y] 
    (foo (bar x) 
     (bax y))) 

पूर्ण संस्करण मनमाने ढंग से नेस्ट किया जा सकता है के बराबर है। ,

(map (fn [row] 
     (map (fn [col] 
       (+ (* 10 row) col)) 
      (range 3))) 
    (range 3)) 

(for [row (range 3)] 
    (for [col (range 3)] 
    (+ (* 10 row) col)))