धन्यवाद सभी सुंदर उत्तरों के लिए बहुत कुछ! चिह्नित नहीं कर सकते सिर्फ एक के रूप में सहीमानसिक रूप से लिस्प/क्लोजर कोड को कैसे पढ़ा जाए
नोट: पहले से ही एक विकी
मैं कार्यात्मक प्रोग्रामिंग करने के लिए नया हूँ और जब मैं कार्यात्मक प्रोग्रामिंग में सरल काम करता है, उदाहरण के लिए के लिए पढ़ सकते हैं एक संख्या के फैक्टोरियल की गणना, मुझे बड़े कार्यों को पढ़ने में मुश्किल लग रही है। कारण का एक हिस्सा है कि मुझे लगता है कि फ़ंक्शन परिभाषा के भीतर कोड के छोटे ब्लॉक को समझने में असमर्थता और आंशिक रूप से क्योंकि कोड में ()
से मिलान करना मेरे लिए मुश्किल हो रहा है।
यह अच्छा होगा अगर कोई मुझे कुछ कोड पढ़ने के माध्यम से चल सके और मुझे कुछ कोड देने के बारे में कुछ सुझाव दें।
नोट: अगर मैं इसे 10 मिनट तक देखता हूं तो मैं इस कोड को समझ सकता हूं, लेकिन मुझे संदेह है कि जावा में यह कोड लिखा गया था, तो मुझे 10 मिनट लगेंगे। इसलिए, मुझे लिस्प स्टाइल कोड में सहज महसूस करने लगता है, मुझे इसे तेज करना होगा
नोट: मुझे पता है कि यह एक व्यक्तिपरक प्रश्न है। और मैं यहां किसी भी सही उत्तरदायी उत्तर की तलाश नहीं कर रहा हूं। बस कैसे आप इस कोड को पढ़ने के बारे में जाना पर टिप्पणी, स्वागत करते हैं और अत्यधिक उपयोगी
(defn concat
([] (lazy-seq nil))
([x] (lazy-seq x))
([x y]
(lazy-seq
(let [s (seq x)]
(if s
(if (chunked-seq? s)
(chunk-cons (chunk-first s) (concat (chunk-rest s) y))
(cons (first s) (concat (rest s) y)))
y))))
([x y & zs]
(let [cat (fn cat [xys zs]
(lazy-seq
(let [xys (seq xys)]
(if xys
(if (chunked-seq? xys)
(chunk-cons (chunk-first xys)
(cat (chunk-rest xys) zs))
(cons (first xys) (cat (rest xys) zs)))
(when zs
(cat (first zs) (next zs)))))))]
(cat (concat x y) zs))))
अनुभव? एक जिसे आप लिस्प कोड पढ़ने के लिए उपयोग करते हैं, यह तेज़ होगा। हालांकि, लिस्प के बारे में मुख्य शिकायतों में से एक यह है कि इसे पढ़ना मुश्किल है, इसलिए उम्मीद न करें कि यह आपके लिए सहज हो जाए। –
यह एक आसान काम नहीं है। यदि आप इसे 10 मिनट के बाद पूरी तरह से समझ सकते हैं, तो आप ठीक हैं। –