में Seq इंटरफ़ेस को लागू करना चाहिए मैं Clojure में एक डेटा संरचना है जो एक प्रयोग से परिणामों के एक सेट का प्रतिनिधित्व करता है:मैं clojure
(defprotocol ResultSet
(columns [rs] "return a collection of the columns in the resultset, represented by keywords")
(rows [rs] [rs column-keys] "returns a seq of the rows in the resultset, order and column specified as keywords by column-keys. with a single argument returns rows with all columns present"))
और मैं एक deftype
जो इस प्रोटोकॉल को लागू करता है। मुझे फ़ंक्शंस लिखने में दिलचस्पी है जो परिणाम परिणामों में सभी परिणामों पर एक फ़ंक्शन को मैप करते हैं, या परिणाम सेट पर जो गुना होता है, मूल रूप से सीक फ़ंक्शंस के रूप में वही काम करता है।
हास्केल में मैं प्रासंगिक टाइपक्लास (जैसे फंक्टर) को कार्यान्वित करके और फिर एफएमएपी या एमफिल्टर जैसे कार्यों का उपयोग करके ऐसा करता हूं। तो मैंने क्लोजर में ऐसा करने में देखा और आईएसईक इंटरफ़ेस को लागू करने के बारे में कुछ विचारों के साथ घायल हो गया।
तो, क्या यह एक अच्छा विचार है? मुझे आईएसईक लागू करने के बारे में कई संसाधन नहीं मिल रहे हैं और मैं सोच रहा हूं कि इसके लिए मूर्खतापूर्ण दृष्टिकोण क्या है।
यह मुझे परिणामस्वरूप पंक्तियों के अंतर्निहित अनुक्रम को वापस करने की तरह कुछ करने की अनुमति देगा, लेकिन यह मुझे 'परिणाम' पर एक फ़ंक्शन को मैप करने की अनुमति नहीं देता है और 'परिणाम' वापस प्राप्त करता है? संपादित करें: मुझे अभी एहसास हुआ है कि नक्शा में निर्मित इस तरह व्यवहार नहीं करता है, शायद मैं गलत काम करने की कोशिश कर रहा हूं। –
जैसा कि आप अपने संपादन में कहते हैं, क्लोजर अनुक्रम फ़ंक्शंस आमतौर पर प्रदान किए गए संग्रह पर कॉल (seq) को कॉल करता है और उसके बाद सीक पर काम करता है और वापस लौटाता है, न कि किसी विशेष प्रकार के संग्रह। यह पहली बार थोड़ा अजीब लगता है, लेकिन व्यवहार में यह वास्तव में अच्छी तरह से काम करता है। जब आपको वास्तव में इसकी ज़रूरत होती है, तो आपको वास्तव में आवश्यकता के संग्रह प्रकार में एक सीईसी को मोड़ने का कोई तरीका होता है (जब आप सीक पर काम कर रहे होते हैं तो यह अक्सर नहीं होता है - यह विचार करने योग्य हो सकता है कि आपको इसकी आवश्यकता भी है एक परिणामसेट प्रकार बिल्कुल) –