मैं कई मापों को इकट्ठा करने और उन्हें संसाधित करने के लिए time
मैक्रो पर कॉल के परिणामों को कैप्चर करना चाहता हूं। मैंने स्थानीय आउटपुट setf
मानक आउटपुट की कोशिश की और इसे एक स्ट्रिंग पर रीडायरेक्ट किया लेकिन यह time
मैक्रो के साथ काम नहीं किया। हो सकता है कि यह गलत है, लेकिन मैं क्या करने की कोशिश की है:लिस्प में मैं अभिव्यक्ति का मूल्यांकन करने में व्यतीत समय को कैसे माप और कैप्चर कर सकता हूं?
(with-output-to-string (str)
(let ((*standard-output* str))
(time (test-with-size 40))))
सवाल:
time
के उत्पादन में कब्जा करने के लिए कोई तरीका है?- यदि नहीं, तो क्या मैं
slime-profile-report
कमांड के आउटपुट को कैप्चर कर सकता हूं? - यदि उपरोक्त में से कोई भी काम नहीं करता है, तो मैं मनमाने ढंग से अभिव्यक्ति का मूल्यांकन करने में व्यतीत समय को कैसे माप सकता हूं?
जो मैं पूरा करना चाहता हूं वह इनपुट एल्गोरिदम के रन-टाइम को मापने के लिए है क्योंकि प्रत्येक इनपुट आकार (1 से 100 तक) के लिए इनपुट बढ़ता है, मैं कई बार मापता हूं और रखता हूं औसत। फिर मैं परिणाम साजिश करना चाहता हूं। प्लॉटिंग आसान है, और मुझे क्लिकी में कई तरीके मिले हैं, लेकिन मैं परिणाम कैसे एकत्र कर सकता हूं?
मैं सीएलआईएसपी और सीसीएल का उपयोग कर रहा हूं।
संपादित करें: Paul Nathan ने इंगित किया कि time
मैक्रो आउटपुट *trace-output*
पर एक समाधान है। हालांकि मुझे एक अच्छा, सरल, समाधान चाहिए, क्योंकि इस के साथ, मुझे एक कार्यान्वयन विशिष्ट ट्रेस को पार्स करना होगा।
क्या आपने एकाधिक-मूल्य-बाइंड की कोशिश की है? इसके अलावा, http://www.lispworks.com/documentation/HyperSpec/Body/m_time.htm कहता है कि यह * ट्रेस-आउटपुट * स्ट्रीम को लिखता है। –
धन्यवाद। बहु-मूल्य-बाइंड काम नहीं करता है क्योंकि समय तर्क अभिव्यक्ति मूल्यांकन का परिणाम देता है। लेकिन ट्रेस-आउटपुट काम करता है, हालांकि यह कच्चा उत्पादन है जिसे मुझे पार्स करना होगा। क्या इस कार्यान्वयन विशिष्ट ट्रेस को पार करने से बचने के लिए कोई और "सुरुचिपूर्ण" तरीका है? – Paralife