2012-07-13 22 views
6
> magicFunction 'l' '_' "hello world" 
["he_lo world", "hel_o world", "hello wor_d"] 

क्या मानक प्रीलूड में ऐसा जादू कार्य है या इसे अन्य कार्यों के साथ आसानी से बनाया जा सकता है?एक चरित्र को अन्य

और नहीं, यह होमवर्क नहीं है, लेकिन फिर भी, कृपया अपना खुद का जटिल समाधान हाथ से रोल करने में ज्यादा समय न दें, मैं अपने समय को बर्बाद करने के बजाय खुद को ऐसा करना चाहता हूं;) बस पूछना कि यह है या नहीं मानक।


संपादित करें:

import Data.List (findIndices) 

replace i y xs = take i xs ++ y : drop (i+1) xs 

magicFunction x y xs = map (\i -> replace i y xs) (findIndices (== x) xs) 

इसमें सुधार किया जा सकता है: यहाँ मेरा पहला प्रयास है? निश्चित रूप से replace जैसे कुछ मानक में होना चाहिए? मुझे replace :: Eq a => a -> a -> [a] -> [a]Network.CGI.Protocol में मिला, लेकिन इसमें गलत हस्ताक्षर है।

+0

आप एक गालियां बकने की क्रिया फिल्टर बाईपास बनाने के लिए कोशिश कर रहे हैं: अपने संस्करण और tails और inits साथ डैनियल वैगनर के संकेत के अलावा, यहाँ एक सरल कार्यान्वयन है? एक्सडी – Mysticial

+0

'प्रतिस्थापन' हस्ताक्षर के साथ क्या गलत है? 'ए ~ चार' सेट करें ताकि '[ए] ~ स्ट्रिंग' हो, और हमारे पास' इक् चार 'है, तो समस्या क्या है? – dave4420

+1

@ dave4420 पहली समस्या यह है कि यह 'Network.CGI.Protocol' में है ... इस तरह की कार्यक्षमता के लिए आयात के रूप में बहुत यादृच्छिक (जिसे आप अधिक उपयुक्त स्थानों में _can_ पाते हैं) – Jedai

उत्तर

2

नहीं, नहीं मानक पुस्तकालयों में magicFunction की तरह कुछ है। लेकिन खुद को लिखना आसान है, इसलिए जब तक कि यह अक्सर उपयोग नहीं किया जाता है, तब तक इसे लाइब्रेरी में डालने का कोई मतलब नहीं है।

magicFunction find replace = init . helper 
    where 
    helper (c:cs) = if c == find then ((replace:cs):) else id $ map (c:) (helper cs) 
    helper [] = [[]] 
1

मानक वितरण में ऐसा कुछ भी नहीं है। हालांकि, वहाँ एक प्रसिद्ध चाल है कि एक समाधान की शुरुआत के रूप में कर सकते हैं:

Prelude Data.List> (\xs -> zip (inits xs) (tails xs)) "Hello, world!" 
[("","Hello, world!"),("H","ello, world!"),("He","llo, world!"),("Hel","lo, world!"),("Hell","o, world!"),("Hello",", world!"),("Hello,"," world!"),("Hello, ","world!"),("Hello, w","orld!"),("Hello, wo","rld!"),("Hello, wor","ld!"),("Hello, worl","d!"),("Hello, world","!"),("Hello, world!","")] 
संबंधित मुद्दे