2010-02-03 11 views
23

SICP section 1.2.6 के अनुसार, व्यायाम 1.22:योजना में लिस्प के "रनटाइम" आदिम के बराबर है?

अधिकांश लिस्प कार्यान्वयन एक आदिम बुलाया क्रम कि एक पूर्णांक है कि समय की राशि सिस्टम चल रहा है निर्दिष्ट करता है रिटर्न में शामिल हैं (मापा जाता है, उदाहरण के लिए, माइक्रोसेकंड में)।

मैं DrScheme का उपयोग कर रहा हूं, जहां रनटाइम उपलब्ध नहीं प्रतीत होता है, इसलिए मैं एक अच्छा विकल्प ढूंढ रहा हूं। मैंने पीएलटी-स्कीम संदर्भ में पाया कि current-milliseconds आदिम है। क्या किसी को पता है कि बेहतर समाधान के साथ योजना में टाइमर है या नहीं?

+0

मैं सिर्फ वास्तव में इस समस्या :) –

+0

दिलचस्प है कि मैं जाँच करने के लिए विधेयक छिपकली के ब्लॉग का उपयोग कर रहा में आए मेरी उत्तर के रूप में मैं एसआईसीपी के माध्यम से जाने के 4 साल बाद जा रहा हूं। क्या आपने यह सवाल देखा जब आपने यह प्रश्न पूछा, श्री लizard? –

+0

यहां एक वैकल्पिक 'टाइम-प्राइम-टेस्ट' वाला एक गिस्ट है जो 'रैकेट' में काम करता है: https://gist.github.com/Isaac-Kleinman/1b623bc2463b241b4383 –

उत्तर

20

current-milliseconds एक ऐसा फ़ंक्शन है जो सिस्टम से वर्तमान मिलीसेकंड गिनती देता है, लेकिन यह घट सकता है। current-inexact-milliseconds समान है, लेकिन एक गारंटीकृत वृद्धि फ्लोटिंग पॉइंट नंबर देता है।

वहाँ भी समान कार्य है कि आप उस पृष्ठ पर पा सकते हैं का एक समूह रहे हैं, लेकिन एक निश्चित समारोह है, तो बस (timeexpr) का उपयोग करता है, तो आप सभी की जरूरत समय के लिए है और इसे बाहर समय ले लिया प्रिंट होगा अभिव्यक्ति का मूल्यांकन करने के लिए।

एक और चीज जो यहां प्रासंगिक है profiler है, यदि आपको अपने कोड के कुछ और वर्बोज़ विश्लेषण की आवश्यकता है।

+4

यह गलत है। सबसे पहले, एसआईसीपी और पीएलटी के बीच कोई सीधा संबंध नहीं है। दूसरा, मिलीसेकंद काउंटर ओएस से आ रहा है, और चूंकि हस्तक्षेप हैंडलर को कुछ मिलीसेकंड के स्तर पर संभाला जाता है, इसलिए एक बेहतर काउंटर में कोई बात नहीं है। ग्रैन्युलरिटी आमतौर पर ~ 20ms पर होती है, यहां तक ​​कि 1ms भी नहीं। यदि आपके पास कुछ भाषा है, उदाहरण के लिए, एक नैनोसेकंद काउंटर, आपको कोई बेहतर परिणाम नहीं मिलेगा। तीसरा, एमसीईसी स्तर पर रनटाइम मापना एक बुरा विचार है, आपको पर्याप्त गणना पाने के लिए पर्याप्त समय के मूल्यांकन को दोहराना होगा, अन्यथा शोर में रनटाइम खो जाएगा। –

+0

यह 'वर्तमान-मिलीसेकंड' है, न कि 'वर्तमान-मिलीसेकंड'। मैंने जवाब संपादित करने की कोशिश की लेकिन SO को संपादन में कम से कम 6 वर्णों की आवश्यकता है। –

+0

मैंने इसे ठीक कर दिया है ... –

3

मैं आज भी इस समस्या से आया हूं। मैं DrRacket का उपयोग कर रहा हूं, जैसा कि ऐसा लगता है कि डॉ। श्शेम का अधिग्रहण हुआ है। यद्यपि यह एक पुराना धागा है, लेकिन मैं इस धागे में किसी भी नए व्यक्ति के लिए अपने निष्कर्ष जोड़ रहा हूं।

चयनित भाषा के रूप में R5RS साथ

, कार्यक्रम से पहले दो पंक्तियों में यह काम करने के लिए निम्नलिखित जोड़ें

(#%require (only racket/base current-milliseconds)) 
(define (runtime) (current-milliseconds)) 
+0

क्या आप सही '#lang ...' स्ट्रिंग कृपया बता सकते हैं? '# लांग आर 5 आरएस' काम नहीं करता है। – Zelphir

+0

ठीक है, मैंने बस पुस्तक के कोड के अपूर्ण 'if' में "अन्य" शाखा जोड़ दी है, ताकि यह '# लांग रैकेट' में चल सके। – Zelphir

+0

@ ज़ेलफिर: मैं औपचारिक रूप से ड्रैक्रेट में भाषा के रूप में नीचे बाईं ओर से "आर 5 आरएस" का चयन करता हूं। यह मेरे लिए फिर से काम किया। – kaustubh

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