Clojure में किसी वैल्यू को किसी नाम से बाँधने को वार कहा जाता है। टॉप-लेवल (ग्लोबल) वार दूसरी भाषाओं के कॉन्स्टेंट जैसे होते हैं।
टॉप-लेवल वार def की मदद से बनाए जाते हैं:
(def fingers 10)
fingers
;;=> 10
defn की मदद से आप ऐसा फंक्शन बना सकते हैं जो शून्य या उससे अधिक आर्गुमेंट लेता है। यह एक ऐसा फंक्शन है जो 2 संख्याओं को जोड़ेगा:
(defn add [x y]
(+ x y))
यह फंक्शन 2 आर्गुमेंट लेता है, जिन्हें वेक्टर [x y] में रखा जाता है। इसके बाद फंक्शन की बॉडी आती है, जिसमें कितने भी एक्सप्रेशन हो सकते हैं। रिटर्न वैल्यू हमेशा बॉडी के अंतिम एक्सप्रेशन, यानी (+ x y), के मूल्यांकन का परिणाम होती है। यह एक्सप्रेशन एक लिस्ट है, जो एक फंक्शन कॉल दर्शाती है। लिस्ट का पहला एलिमेंट + फंक्शन है, जिसे अगले एलिमेंट x और y को आर्गुमेंट के रूप में देकर मूल्यांकित किया जाता है।
ऊपर बनाए गए add फंक्शन को भी इसी तरह कॉल किया जाता है:
(add 2 3)
;;=> 5
Clojure में फंक्शन और वैल्यू का इस्तेमाल उन्हें बनाने के बाद ही किया जा सकता है, यानी फॉर्म हमेशा उसी क्रम में मूल्यांकित किए जाते हैं जिस क्रम में वे दिखाई देते हैं।
Clojure में व्हाइटस्पेस का फॉर्मैटिंग के अलावा कोई महत्व नहीं है।
Clojure के फंक्शन और वार नेमस्पेस में व्यवस्थित रहते हैं। एक नेमस्पेस आपस में जुड़ी कार्यक्षमता को एक साथ रखता है और ns मैक्रो की मदद से बनाया जाता है:
(ns calculator)
(def pi 3.14)
(defn add [x y]
(+ x y))
Clojure में दो तरह के कमेंट होते हैं। सिंगल लाइन कमेंट से पहले ; लगाया जाता है, और comment फॉर्म का इस्तेमाल (comment और ) के बीच की हर चीज़ के मूल्यांकन को रोकने के लिए किया जाता है।
इस अभ्यास में आप कुछ कोड लिखेंगे, जो आपकी पसंदीदा पकाने की किताब से एक शानदार लसान्या पकाने में आपकी मदद करेगा।
आपके सामने चार काम हैं, और सब लसान्या पकाने में लगने वाले समय से जुड़े हैं।
लसान्या को ओवन में कितने मिनट रहना चाहिए, यह जाँचने के लिए expected-time वेरिएबल बनाइए। पकाने की किताब के अनुसार, ओवन में लगने वाला अनुमानित समय 40 मिनट है:
expected-time
;;=> 40
remaining-time फंक्शन बनाइए, जो आर्गुमेंट के रूप में वे वास्तविक मिनट लेता है जितनी देर लसान्या ओवन में रह चुकी है। यह फंक्शन पिछले काम में तय किए गए ओवन के अनुमानित समय के आधार पर लौटाता है कि लसान्या को ओवन में अभी कितने मिनट और रहना है।
(remaining-time 30)
;;=> 10
prep-time फंक्शन बनाइए, जो आर्गुमेंट के रूप में लसान्या में डाली गई परतों की संख्या लेता है और लौटाता है कि लसान्या तैयार करने में आपने कितने मिनट लगाए, यह मानते हुए कि हर परत तैयार करने में आपको 2 मिनट लगते हैं।
(prep-time 2)
;;=> 4
total-time फंक्शन बनाइए, जो दो आर्गुमेंट लेता है: पहला आर्गुमेंट लसान्या में डाली गई परतों की संख्या है, और दूसरा आर्गुमेंट वे मिनट हैं जितनी देर लसान्या ओवन में रह चुकी है। इस फंक्शन को लौटाना चाहिए कि लसान्या पकाने में आपने कुल कितने मिनट काम किया, यानी तैयारी में लगे मिनटों और इस समय लसान्या ने ओवन में जो मिनट बिताए हैं, उनका जोड़।
(total-time 3 20)
;;=> 26
Exercism पर साइन अप कीजिए और Clojure को 12 कॉन्सेप्ट105 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।