में टाइप किए गए टुपल्स और क्लोजर मैंने थोड़ा प्रोग्रामिंग और हास्केल किया है, और ग्रोवी में कुछ हास्केल सूची प्रसंस्करण कार्यों को कार्यान्वित करना चाहता था। नीचे unfoldr
का कार्यान्वयन है। मूल रूप से A
परिणामस्वरूप इटरेटर (यानी सूची) का प्रकार है और B
राज्य है।ग्रोवी
दो चीजें मैं करने के लिए मजबूत प्रकार देना चाहते हैं कर रहे हैं: परिभाषित करने के लिए सक्षम होने के लिए मैं Tuple<A,B>
के बजाय सिर्फ Tuple
- मैं चाहूँगा बंद करने के तर्क, न केवल परिणाम प्रकार।
उदाहरण कोड जो एक पुनरावर्तक उत्पन्न करता है जो 1 से 100 तक इंगित करता है नीचे है और here पर विचार किया गया है।
class Unfoldr<A,B> implements java.util.Iterator<A>
{
public Unfoldr(Closure<Tuple> f, B init)
{
this.f = f;
this.state = f(init);
}
public synchronized A next()
{
if (hasNext())
{
A curr = state.get(0);
state = f(state.get(1));
return curr;
}
else
{
throw java.lang.NoSuchElementException;
}
}
public synchronized boolean hasNext()
{
return (state != null);
}
public void remove() { throw UnsupportedOperationException; }
private Closure<Tuple> f;
private Tuple state;
}
def unfoldr = { f, init -> new Unfoldr(f, init) };
def u = unfoldr({ x -> if (x < 100) { new Tuple(x + 1, x + 1) } else null; }, 0);
for(e in u)
{
print e;
print "\n";
}
आप क्लोजर के तर्कों का प्रकार घोषित कर सकते हैं और 'कंपाइलस्टैटिक' का उपयोग कर सकते हैं, क्या आप चाहते हैं? या आप 'निजी क्लोजर एफ' तर्क प्रकार घोषित करना चाहते हैं? 'निजी बंद <ए 1, ए 2, ट्यूपल> एफ' की तरह? –
Will
क्या आप इस पर कुछ प्रकाश डालना पसंद नहीं करेंगे? – Will
हाय विल। क्षमा करें, अब मैं सरणी का उपयोग करने के लिए परिवर्तित कर दिया गया है, tuples नहीं। लेकिन हाँ, 'निजी बंद, सी> एफ' वह था जो मैं वास्तव में देख रहा था। –
Clinton