2012-09-29 12 views
12

के बीच संघ मैं स्कैला कक्षा में एक कोर्सरा फंक्शनल प्रोग्रामिंग ले रहा हूं। यह दूसरा सप्ताह है और मैंने एक दीवार मारा। असाइनमेंट में हम सेट्स के साथ काम कर रहे हैं, लेकिन उदाहरण के लिए, हम सभी प्रकार की सेट जावा में मिलते हैं। यह एक सेट है जो मान देता है कि यदि मूल्य वहां है और अन्यथा गलत है। वे कहते हैं कि यह एक कंटेनर नहीं है, यह सिर्फ एक समारोह है।असाइनमेंट सहायता: सेट

यह स्पष्ट करने के लिए, मुझे आपकी मदद चाहिए। मैं नहीं चाहता कि आप मेरी असाइनमेंट को हल करें, यह सिर्फ एक उदाहरण है कि मैं यह जानना चाहता हूं कि मुझे क्या करना चाहिए।

/** 
    * We represent a set by its characteristic function, i.e. 
    * its `contains` predicate. 
    */ 
    type Set = Int => Boolean 

/** 
    * Indicates whether a set contains a given element. 
    */ 
    def contains(s: Set, elem: Int): Boolean = s(elem) 

/** 
    * Returns the set of the one given element. 
    */ 
    def singletonSet(elem: Int): Set = Set(elem) 

/** 
    * Returns the union of the two given sets, 
    * the sets of all elements that are in either `s` or `t`. 
    */ 
    def union(s: Set, t: Set): Set = ??? 

यह कोड है। singletonSet में मुझे लगता है कि इसे हल करने का तरीका Set(elem) वापस करना है, है ना?

अगर वह अच्छा है, मैं कैसे दोनों के बीच संघ बनाने के लिए माना जाता रहा हूँ? मैं प्रोग्रामिंग के लिए नया नहीं हूं लेकिन मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है। चूंकि मुझे संख्याओं का "सेट" वापस नहीं करना चाहिए।

यह एक और छात्र ने मुझे सेट के बारे में बताया: "लेकिन सभी" सेट "एक ऐसा कार्य है जो एक इंट लेता है और एक बूलियन (इंट => बूलियन) देता है। कोई भी कार्य जो इंट लेता है और लौटाता है बूलियन जैसे 'सेट' फिट बैठता है "

क्या मैं संघ समारोह में करने की कोशिश की तरह कुछ है:।

def union(s: Set, t: Set): Set = (s | t) //value | not a member of Int => Boolean 

किसी भी मदद की सराहना की जाएगी :)

+0

जिज्ञासु कि अनिवार्य रूप से एक ही सवाल है http://stackoverflow.com/questions/13052735/is-my-understanding-of-below-scala-code-correct और यह खुला रहता है। आईएमओ दोनों खुले रहना चाहिए क्योंकि वे वैध प्रश्न हैं। – talonx

उत्तर

35

ऐसा लगता है दीवार आप मार रहे हैं कि आप स्काला में कार्यों को परिभाषित करने के साथ अपरिचित हैं। इस विशेष मामले में आपको Int => Boolean प्रकार के कार्यों को परिभाषित करने की आवश्यकता है, वे Int लेते हैं और Boolean वापस लेते हैं।

यहाँ प्रकार Int => Boolean के समारोह शाब्दिक के कुछ उदाहरण हैं। उन्हें स्काला कंसोल या स्काला आईडीई वर्कशीट में प्रयास करें:

(x: Int) => true 
(x: Int) => false 
(x: Int) => x == 2 
(x: Int) => x == 10 
(x: Int) => x == 2 || x == 10 
(x: Int) => x % 2 == 0 

फिर तुम सब काम के लिए क्या करना है एक ही वाक्य विन्यास का उपयोग करने के लिए, (x: Int) => के साथ शुरू और उसके बाद संघ के अर्थ का अनुवाद, एक दूसरे को काटना है, .. अभिव्यक्ति के दाहिने हाथ में। शिक्षा के

भाग यह एक वास्तविक प्रयास कर रही है। मेरा मानना ​​है कि आप समाधान को कई बार पुनः सबमिट कर सकते हैं, इसलिए अगर आपको पहली कोशिश पर 10/10 नहीं मिलती है तो सबमिट करने और पुन: सक्रिय करने में संकोच न करें। आपको केवल कोड संकलित करने की आवश्यकता है। सौभाग्य!

+1

इससे मदद मिली। धन्यवाद। अगर मेरे पास पहले ऐसा जवाब था तो यह आसान होता। मैंने कोशिश की कि कोशिश करने के कई घंटों के बाद और कुछ अन्य उत्तरों (जो वास्तव में जवाब का खुलासा नहीं करता) के बाद यह कैसे किया जाए :) :) – Andrew

+2

यह कहना नहीं है कि मैं आपके उत्तर की सराहना नहीं करता हूं। इसके विपरीत, आपको बहुत धन्यवाद – Andrew

+0

एक निष्क्रिय धागे पर टिप्पणी करने के लिए खेद है। लेकिन क्या कोई लेख या वीडियो है जहां मैं इस समस्या को बेहतर ढंग से समझ सकता हूं? मैं जो कुछ देखता हूं वह अवशेषों का तर्क है लेकिन मैं स्कैला से बहुत परिचित नहीं हूं और इसे हल करने से पहले समस्या को समझना चाहता हूं। – kromastorm

8

एक संभावित संकेत करने के लिए है प्रकारों को देखो। Set प्रकार देखें। यह Int से Boolean में फ़ंक्शन के लिए वास्तव में एक प्रकार का उपनाम है।

इस प्रकार, आप दो सेट है जब, आप वास्तव में दो कार्य किया है। इन सेटों के संघ का प्रतिनिधित्व करने वाले फ़ंक्शन को प्रदान करने के लिए आप उनका उपयोग कैसे कर सकते हैं? यह आपका शुरुआती बिंदु होना चाहिए।

+0

मैं दो कार्यों के बीच एक या एक करूँगा, लेकिन मुझे एक एक्स की भी आवश्यकता होगी। मुझे बेहतर जवाब नहीं मिल सकता है। – Andrew

+1

आप अधिक महत्वपूर्ण तथ्य भूल गए: 'सेट' फ़ंक्शन के लिए उपनाम है। आपका 'एक्स' इससे आया है: आपको एक फ़ंक्शन वापस करना होगा, जो बताता है कि "बाहरी" 'X' के साथ क्या करना है। – Nicolas

+0

तो यह 2 सेट के बीच या एक है?मैंने कोशिश की और यह "एस | टी" रखने के लिए काम नहीं करता है, यह कहता है "मूल्य | Int => बूलियन का सदस्य नहीं है"। – Andrew