2012-09-05 11 views
11

4Clojure समस्या "Universal Computation Engine" मूल्यांकन reimplementing को शामिल हल करने की कोशिश करते हैं, मैं गलती से ऊपर कुछ इस तरह बुला समाप्त हो गया: बजायक्लोजर प्रतीक फ़ंक्शन के रूप में उपयोग करते समय क्या करते हैं?

(apply '/ '(16 8)) 

इरादा:

(apply/'(16 8)) 

यह भ्रामक पक्ष प्रभाव नहीं पड़ा 8 लौटने की, जिसने मुझे सोचा कि मैंने अपने गणित को गड़बड़ कर दिया है।

मैं बाद के बाद कुछ डिबगिंग-मैं फोन करने के लिए प्रयास करने से पहले / प्रतीक का मूल्यांकन करने में विफल रहा था मेरी त्रुटि महसूस किया कि यह-और इतना महसूस किया कि clojure.lang.Symbolclojure.lang.IFn को लागू करना चाहिए। लेकिन यह कार्यान्वयन क्या करता है? मैं इसे करने के लिए प्राप्त कर सकता हूं nil एक तर्क के साथ, या दिया गया दूसरा तर्क है।

+0

संभावित डुप्लिकेट [जब मैं क्लोजर प्रतीक के लिए तर्क पास करता हूं तो क्या होता है?] (Http://stackoverflow.com/questions/8219305/what-happens-when-i-pass-arguments-to-a-clojure- प्रतीक) – amalloy

उत्तर

12

प्रतीकों मानचित्र में को अपने आप देखें, जितना कीवर्ड करते हैं। Symbol's implementation देखें:

… 
122 public Object invoke(Object obj) { 
123   return RT.get(obj, this); 
124 } 
125 
126 public Object invoke(Object obj, Object notFound) { 
127   return RT.get(obj, this, notFound); 
128 } 
… 

(।? RTclojure.lang.RT, जो सिर्फ सब कुछ के बारे में करता है "क्रम")

उदाहरण दिए गए में, देखने विफल हो रहा है (क्योंकि 16 एक नक्शा नहीं है), और इसलिए notFound मूल्य (8) वापस किया जा रहा है।

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