words
प्रस्ताव पर विचार करें; यह वास्तव में आसान है और एक निम्नलिखित तरीके से यह लिख सकते हैं:प्रीलूड के शब्दों का कार्य अधिक सरल क्यों नहीं लिखा गया है?
words' :: String -> [String]
words' [] = []
words' str = before : words' (dropWhile isSpace after) where
(before, after) = break isSpace str
हालांकि, मैंने देखा है कि अपने मूल प्रस्तावना कोड बहुत कम ... प्राकृतिक लगता है:
words :: String -> [String]
words s = case dropWhile {-partain:Char.-}isSpace s of
"" -> []
s' -> w : words s''
where (w, s'') =
break {-partain:Char.-}isSpace s'
मुझे लगता है देखते हैं कि इसके लिए अनुकूलन से संबंधित कारण। सवाल यह है: क्या मुझे उम्मीद है कि संकलक को words'
फ़ंक्शन को इसके साथ ही इसके प्रीलूड संस्करण को अनुकूलित करना चाहिए? मैंने एक ही फ़ंक्शन का उपयोग किया (break
, dropWhile
, isSpace
)।
मैं एक बार बहुत आश्चर्य है कि GHC सरल निम्न स्तर के अनुकूलन के कुछ का पालन नहीं किया था:
C vs Haskell Collatz conjecture speed comparison
लेकिन एक तरफ {-partain:Char.-}
बिट के लिए (संकलक के लिए इस संकेत में बहुत सहायक प्रतीत नहीं होता इस स्थिति आईएमओ) words
कोड एक उच्च स्तरीय भाषा के लिए अनावश्यक रूप से फूला हुआ लगता है। इस मामले में इसके पीछे क्या कारण है?
मुझे नहीं लगता कि '{-partain: Char .-}' बिट एक टिप्पणी-आउट मॉड्यूल नाम से कुछ भी है, वैसे भी। Google के अनुसार, अंतिम नाम वाले किसी व्यक्ति ने कुछ समय पहले जीएचसी पर काम किया था। मुझे लगता है कि वह सिर्फ उनकी टिप्पणियों पर हस्ताक्षर कर रहा था। – hammar
ओह, मैंने सोचा कि यह संकलक पर कुछ प्रभाव हो सकता है। साथी आदमी के साथ अच्छा पकड़ो! – ljedrz
वह भाग लेंगे। – augustss