2010-07-22 19 views
7

में कार्यों की एक सूची के पहले लागू अगर मैं कार्यों की एक सूची है:Clojure

(def lst '(+ -))

और मैं, मैं होगा नंबरों की सूची के लिए उस सूची (+) के पहले आवेदन करना चाहते हैं लगता है कि अपने

(apply (first lst) '(1 2 3 4))

लेकिन जाहिरा तौर पर यू गलत कर रहा हूँ? मुझे लगता है कि सिंटेक्स गलती। मैं यह कैसे करु?

पुनश्च:

=>(first lst) 
+ 

=>(apply (first lst) '(1 2 3 4)) 
4 

त्रुटि के बिना दोनों वापसी, वे तो बस लौट मैं पहले मामले में क्या उम्मीद करेंगे, और क्या मैं दूसरे में उम्मीद नहीं होता।

उत्तर

13

के बाद से अपनी सूची उद्धृत किया गया है:

(def lst '(+ -)) 
     ; ^- quote! 

अपने सदस्यों दो प्रतीकों, कार्य नहीं कर रहे हैं। Clojure में एक प्रतीक एक समारोह के रूप में इस्तेमाल किया जा सकता है, लेकिन फिर यह एक कीवर्ड की तरह बहुत ज्यादा काम करता है (यानी ही अपने तर्क में दिखता है):

('foo {'foo 1}) 
; => 1 

सही समाधान एक सूची का उपयोग करने के लिए है - या, और अधिक मुहावरे, एक वेक्टर - कार्यों की:

(def lst (list + -)) ; ok 
; or... 
(def lst `(~+ ~-)) ; very unusual in Clojure 
; or... 
(def lst [+ -])  ; the idiomatic solution 

फिर अपने apply उदाहरण काम करेंगे।

वैसे, नोटिस एक समारोह है, जब आरईपीएल द्वारा वापस मुद्रित, प्रतीक है जो यह नाम की तरह नहीं दिखता है कि:

user=> + 
#<core$_PLUS_ [email protected]> 
+0

Ahhhhhh। जो अब इतना समझ में आता है। बस इसे किसी से सुनना था जो जानता था कि वे क्या कर रहे थे। बहुत बहुत धन्यवाद। – trh178