एक नकल परियोजना यूलर समस्याओं में असामान्य नहीं पैटर्न के लिए कुछ बराबर हो रहा है:एक स्केला ParStream
Stream.from(1).map(f).takeWhile((_>0)).foldLeft(0L)(_+_)
जहां च कुछ महंगा करने के लिए गणना समारोह जो किसी अज्ञात बिंदु तक सकारात्मक मूल्यों रिटर्न है, और इसके बाद शून्य लौटाता है।
मुझे समांतर चीजों की तरह लगता है, खासकर जब स्कैला के समांतर संग्रह और .par
इसे इतना आसान बनाते हैं। लेकिन एक ParStream के अभाव में, सबसे अच्छा मैं के साथ आ गया है:
val BATCH=1024
Stream.from(1,BATCH).flatMap(
i=>(i until i+BATCH).par.map(f)
).takeWhile((_>0)).foldLeft(0L)(_+_)
जो बहुत ही सुंदर प्रतीत होता है नहीं और BATCH
मूल्य के चुनाव के प्रति संवेदनशील है (लेकिन पर x4 गति सुधार उपज कर सकते हैं मेरे क्वाड कोर)।
एक ही परिणाम प्राप्त करने के क्लीनर तरीकों के लिए कोई सुझाव?
आपके द्वारा दिए गए उदाहरण समकक्ष नहीं हैं: उदाहरण के लिए 'वैल एफ = 15 - (_: Int) 'और' BATCH = 10' पहले 105 देता है और दूसरा 95 –
@ लुइगी: यही कारण है कि मैंने इसे योग्यता दी "सकारात्मक मूल्यों को वापस देता है ... और इसके बाद शून्य लौटाता है"। उदाहरण के साथ यह def f (x) = 0 अधिकतम (15-x) के साथ काम करता है। – timday