2010-03-29 12 views
13

क्लोजर के defn, defmacro और binding (क्या मैं कुछ भूल रहा हूं) में तर्कों के चारों ओर स्क्वायर ब्रैकेट्स वास्तव में वेक्टर बना रहा हूं या क्या यह सिंटैक्स का मामला है, जिससे तर्क शेष से बाहर खड़े हो जाते हैं?क्लोजर के डीफएन, डिफैमक्रो और वास्तव में एक वेक्टर बाध्यकारी में स्क्वायर ब्रैकेट हैं?

मैं जिसमें कहा गया है कार्रवाई में Clojure पढ़ रहा हूँ:

Clojure वैक्टर का उपयोग करता समारोह तर्क या बंधन रूपों को निरूपित करने के।

जिसने मुझे यह प्रश्न यहां पूछा।

उत्तर

20

हां, यह वास्तव में एक वेक्टर है। हम देख सकते हैं कि मैन्युअल रूप से फ़ंक्शन का निर्माण करके और फिर इसका मूल्यांकन करके:

(eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100)) 
;=> 200 

आशा है कि इससे मदद मिलती है।

+0

ग्रेट, धन्यवाद :) –

+0

हालांकि एक प्रश्न (साढ़े सालों के बाद ...), यह क्यों स्वीकार नहीं किया जाता है? (defn foo (वेक्टर 'x' y) (+ x y)) –

+1

'defn' रूप एक मैक्रो है, जिस समय इसकी जांच की गई है (मैक्रोएक्सप्शन समय) कुछ भी मूल्यांकन नहीं किया गया है। तो जब यह बाध्यकारी रूप को देखता है तो यह एक वेक्टर की अपेक्षा करता है लेकिन इसके बजाय एक सूची '(वेक्टर (उद्धरण x) (उद्धरण वाई)) देखता है। – fogus

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