तह के साथ गुमनाम कार्यों

0

सवाल

मैं वर्तमान में हूँ की कोशिश कर जानने के लिए तह.

लेकिन का उपयोग कर के बजाय पूर्वनिर्धारित कार्यों मैं का उपयोग करना चाहते हैं ।

तो मैं करने के लिए चाहते हैं पर डबल सभी स्वर में एक स्ट्रिंग.

doubleVowels :: String -> String

मेरा प्रयास है (अभी के लिए सिर्फ 'एक', के रूप में मैं कर रहा हूँ कोशिश इसे हल करने के लिए एक पत्र पहली और विस्तार होगा और यह अनुकूलन, एक बार इसे चलाता है):

doubleVowels :: String -> String
doubleVowels  a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a

चलाने के लिए कोशिश कर वह कोड मैं जा रहा हूँ निम्नलिखित erorr:

Experimenting.hs:8:78: error:
    * Couldn't match type `[Char]' with `Char -> Char'
      Expected type: Char -> Char
        Actual type: String
    * In the expression: a
      In the expression: if eachChar == 'a' then (a ++ "aa") else a
      In the first argument of `foldl', namely
        `(\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a)'
  |
8 | doubleVowels a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |                                                                              ^

Experimenting.hs:8:81: error:
    * Couldn't match expected type `Char' with actual type `[Char]'
    * In the second argument of `foldl', namely `""'
      In the expression:
        foldl
          (\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
      In an equation for `doubleVowels':
          doubleVowels
            = foldl
                (\ eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |
8 | doubleVowels a = foldl (\eachChar -> if eachChar == 'a' then (a ++ "aa") else a) "" a
  |                                                                                 ^^
Failed, no modules loaded.

2

सबसे अच्छा जवाब

4
doubleVowels :: String -> String
doubleVowels  a = foldr (\eachChar b -> if eachChar == 'a' then ("aa" ++ b) else (eachChar:b)) "" a

ज्यादातर मामलों में, अगर वहाँ है कोई विशेष कारण के लिए foldlका उपयोग करें foldr के बजाय foldl के रूप में यह अनुमति देता है हास्केल कंपाइलर करने के लिए lazily का मूल्यांकन करें, अपनी अभिव्यक्ति है । अगर मुझे सही याद है, फिर भी का उपयोग करें foldl'के बाद से foldl सख्त नहीं है और बहुत ज्यादा स्मृति नहीं है, जबकि आप दे रही है, किसी भी लाभ के लिए आलस्य है ।

इसके अलावा, आप याद कर रहे हैं के लिए दूसरा तर्क foldrएस (या foldlएस) समारोह. foldr है के प्रकार:

foldr :: (a -> b -> b) -> b -> t a -> b

समारोह के लिए foldr है प्रकार a -> b -> b जहां पहला तर्क है वर्तमान तत्व की तह संरचना और दूसरा संचायक. लैम्ब्डा है कि आप का उपयोग कर रहे हैं केवल एक ही पैरामीटर.

इसके अलावा, शरीर के लैम्ब्डा समारोह भी ज्यादा मतलब नहीं है.

if eachChar == 'a' then (a ++ "aa") else a)

a है पैरामीटर है कि आसपास के समारोह doubleVowels प्राप्त करता है. आप का उपयोग करने की जरूरत मापदंडों के लैम्ब्डा समारोह में यहाँ है ।

2021-11-20 04:24:46
4

सब से पहले, इस समारोह में प्रयोग किया जाता foldl होना चाहिए दो argments. पहले एक accmulated परिणाम है, और अन्य वर्तमान चार. दूसरे, मूल्यांकन के आदेश के foldl है बाएँ से सही करने के लिए, तो हम करने के लिए है reverse परिणाम स्ट्रिंग.

उदाहरण के लिए, यहाँ एक संशोधित संस्करण है

 doubleVowels :: String -> String
 doubleVowels s = reverse $ foldl (\x y -> if y == 'a' then ("aa" ++ x) else (y : x)) "" s
2021-11-20 04:13:13

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में