2012-09-15 26 views
8

4clojure अभ्यास करना, एक लक्ष्य सही उत्तर प्रदान करना है और एक वैकल्पिक लक्ष्य संभवतः सबसे छोटा समाधान प्रदान करना है (रिक्त स्थान की गणना नहीं की जाती है), ए.के.ए. कोड गोल्फ। फिर आप अन्य समाधानों की तुलना कर सकते हैं।मैं क्लोजर स्रोत कोड को दोबारा कैसे कर सकता हूं?

व्यायाम करते समय मैं पहले सही उत्तर ढूंढता हूं। फिर मैं मैनुअल को अपने स्रोत कोड पर रीफैक्टरिंग करता हूं, जिसमें एक वर्ण में वैरिएबल नामों का नाम बदलना शामिल है। उदाहरण के लिए, इस मूल चरण को लागू करने के बाद, मेरा कोड इस तरह दिख सकता है।

(fn f[s] 
    (if (empty? s) 
    {} 
    (let [[k & r] s 
     [v n] (split-with number? r)] 
     (assoc (f n) k v)))) 

एक मानव के लिए काफी पढ़ने योग्य नहीं है, लेकिन 4Clojure कोड गोल्फ प्रतियोगिता में बेहतर प्रदर्शन के बाद से यह पात्रों का एक बहुत बचाता है।

जिज्ञासा के लिए आप इसे स्वचालित करने के लिए emacs में कैसे करेंगे? क्या clojure.core में फ़ंक्शन रीफैक्टरिंग है जो मदद कर सकता है? मुझे कोई नहीं मिला।

उत्तर

6

पुस्तकालयों को जानें। उदाहरण के लिए, ऐसा लगता है कि आप if-let या seq का उपयोग कर सकते हैं। यदि आप एक स्थिर विश्लेषण उपकरण "धोखाधड़ी" का उपयोग करने पर विचार नहीं करते हैं, तो Kibit

+0

यदि ये-चलो या सीक के लिए ये thnx, मैं उन्हें जानता हूं। वास्तव में यहां निकाला गया कोड केवल चित्रण उद्देश्य के लिए है। किबिट के लिंक के लिए धन्यवाद। दरअसल मैं अपने स्रोत कोड में देख रहा हूं, और नए कार्यों की खोज कर रहा हूं जिन्हें मैं नहीं जानता था: चलना और प्रीवाक। डॉक्टर से यह वास्तव में गंध करता है जैसे मैं चाहता था। धन्यवाद :-) –