के संदर्भ में कौन सा फ़ंक्शन सबसे अच्छा है, मैंने 3 फ़ंक्शंस लिखे हैं जो एक सूची में एक-तत्व दिखाई देने की संख्या की गणना करते हैं। मैंने विभिन्न इनपुट की कोशिश की और इसे प्रोफाइल किया लेकिन मुझे अभी भी पता नहीं है कि स्टैक उपयोग दक्षता और समय दक्षता के मामले में कौन सा फ़ंक्शन सबसे अच्छा है। कृपया मेरी मदद करें।स्टैक उपयोग क्षमता और समय
;; Using an accumulator
(defn count-instances1 [a-list an-element]
(letfn [(count-aux [list-aux acc]
(cond
(empty? list-aux) acc
:else (if (= (first list-aux) an-element)
(count-aux (rest list-aux) (inc acc))
(count-aux (rest list-aux) acc))))]
(count-aux a-list 0)))
;; Normal counting
(defn count-instances2 [a-list an-element]
(cond
(empty? a-list) 0
:else
(if (= (first a-list) an-element)
(+ 1 (count-instances2 (rest a-list) an-element))
(count-instances2 (rest a-list) an-element))))
;; using loop. does this help at all?
(defn count-instances3 [a-list an-element]
(loop [mylist a-list acount 0]
(if (empty? mylist)
acount
(if (= (first mylist) an-element)
(recur (rest mylist)(inc acount))
(recur (rest mylist) acount)))))
आपके प्रोफाइलिंग प्रयासों के परिणाम क्या थे? –
नेस्टेड 'defn' शायद आप जो सोचते हैं वह नहीं करता है। 'defn' हमेशा एक अपूर्ण समारोह को परिभाषित करता है। आप 'letfn' (या यहां तक कि' (चलो [एफ (एफएन ...)]) ') का उपयोग कर सकते हैं यदि आप एक आंतरिक कार्य को परिभाषित करना चाहते हैं। –
धन्यवाद ब्रायन। लेकिन मैं लेटफन काम करने के लिए नहीं मिल सकता है। क्या आप लेटफन के साथ अपना प्रश्न संपादित कर सकते हैं? बहुत बहुत धन्यवाद। – unj2