में एक कुशल संग्रह समारोह मैं लिस्प सीख रहा हूं और परिणामों की एक सूची एकत्र करने के लिए निम्न कार्य लिखा है।सामान्य लिस्प
(defun collect (func args num)
(if (= 0 num)
()
(cons (apply func args)
(collect func args (- num 1)))))
यह निर्मित लूप फ़ंक्शन में समान आउटपुट का उत्पादन करता है।
CL-USER> (collect #'random '(5) 10)
(4 0 3 0 1 4 2 1 0 0)
CL-USER> (loop repeat 10 collect (random 5))
(3 3 4 0 3 2 4 0 0 0)
हालांकि मेरी कलेक्ट समारोह ढेर चल रही है जब मैं एक सूची 100,000 तत्वों लंबे
CL-USER> (length (collect #'random '(5) 100000))
Control stack guard page temporarily disabled: proceed with caution
उत्पन्न करने के लिए जबकि लूप संस्करण नहीं
CL-USER> (length (loop repeat 100000 collect (random 5)))
100000
करता है तब क्या मैं अपने लिए कर सकते हैं की कोशिश संस्करण अधिक अंतरिक्ष कुशल, वहाँ consans के विकल्प हैं? मुझे लगता है कि यह पूंछ रिकर्सिव है। मैं एसबीसीएल का उपयोग कर रहा हूँ। कोई भी मदद बहुत अच्छी रहेगी।