2011-09-16 11 views
5

मेरे मन में क्या है:सीएलआईएसपी में एक सीमित सीमित निष्पादन तंत्र को कैसे कार्यान्वित करें?

(run (long-calculation vars) time-limit) 

जो (long-calculation vars) या nil का परिणाम देता है यदि time-limit तक पहुंच गया है।

+0

यह कार्यान्वयन-निर्भर है। आप किस लिस्प कार्यान्वयन का उपयोग करते हैं? –

उत्तर

1

आप amb ऑपरेटर के लिए एक कार्यान्वयन मिल सकता है, तो आप कुछ इस तरह कर सकता है:

(defmacro run (comp time-limit) 
    `(amb comp 
     (progn (delay ,time-limit) 
       nil))) 

मैकार्थी amb ऑपरेटर के साथ इस गलती के प्रति सावधान रहें। amb को अपने तर्कों को अलग-अलग धागे में मूल्यांकन करना चाहिए और जो भी पहले खत्म होता है उसे चुनें। उदाहरण के लिए, हास्केल में, यह Data.Unamb में वर्णित है।

+1

धन्यवाद। मैं वास्तव में एंब के कार्यान्वयन की उम्मीद कर रहा था :) या मौजूदा पुस्तकालय के लिए एक सूचक। – matejch

1

मैं गणना के लिए धागे को फैलाने वाले बोर्डो-धागे का उपयोग करने का सुझाव दूंगा, और यदि यह टाइमर द्वारा वापस नहीं आता है, तो थ्रेड काटने और शून्य लौटने पर।

1

जंगली है कि तुम क्या चाहते हो रहा है में इस तुतलाना कोड बाहर मिला:

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) 

उम्मीद है कि इस अपने स्वयं के शुरू करने के लिए होने से आपको मदद मिलेगी।