मेरे मन में क्या है:सीएलआईएसपी में एक सीमित सीमित निष्पादन तंत्र को कैसे कार्यान्वित करें?
(run (long-calculation vars) time-limit)
जो (long-calculation vars)
या nil
का परिणाम देता है यदि time-limit
तक पहुंच गया है।
मेरे मन में क्या है:सीएलआईएसपी में एक सीमित सीमित निष्पादन तंत्र को कैसे कार्यान्वित करें?
(run (long-calculation vars) time-limit)
जो (long-calculation vars)
या nil
का परिणाम देता है यदि time-limit
तक पहुंच गया है।
आप amb
ऑपरेटर के लिए एक कार्यान्वयन मिल सकता है, तो आप कुछ इस तरह कर सकता है:
(defmacro run (comp time-limit)
`(amb comp
(progn (delay ,time-limit)
nil)))
मैकार्थी amb
ऑपरेटर के साथ इस गलती के प्रति सावधान रहें। amb
को अपने तर्कों को अलग-अलग धागे में मूल्यांकन करना चाहिए और जो भी पहले खत्म होता है उसे चुनें। उदाहरण के लिए, हास्केल में, यह Data.Unamb में वर्णित है।
धन्यवाद। मैं वास्तव में एंब के कार्यान्वयन की उम्मीद कर रहा था :) या मौजूदा पुस्तकालय के लिए एक सूचक। – matejch
मैं गणना के लिए धागे को फैलाने वाले बोर्डो-धागे का उपयोग करने का सुझाव दूंगा, और यदि यह टाइमर द्वारा वापस नहीं आता है, तो थ्रेड काटने और शून्य लौटने पर।
जंगली है कि तुम क्या चाहते हो रहा है में इस तुतलाना कोड बाहर मिला:
http://www.eurogaran.com/downloads/lisp/limitools/limitime.lsp
मैं शुरू की 'Clozure कॉमन लिस्प संस्करण 1.7-r14925M (DarwinX8664)', कि में तुतलाना कोड चिपकाया श्रोता में साइट (यह सब संकलित), और इस भाग गया:
? (with-max-time 1 (print 5))
5
5
? (with-max-time 1 (sleep 2) (print 5))
? (quit)
उम्मीद है कि इस अपने स्वयं के शुरू करने के लिए होने से आपको मदद मिलेगी।
यह कार्यान्वयन-निर्भर है। आप किस लिस्प कार्यान्वयन का उपयोग करते हैं? –