2012-06-30 12 views
6

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

count :: String -> String -> Int 
count _[] = 0 
count [] _ = 0 
count (x:xs) square 
    |x `elem` square = 1 + count xs (delete x square) 
    |otherwise = count xs square 

check :: String -> String -> String -> String -> Bool 
check prefix suffix word square 
    | (length strippedWord) == (count strippedWord square) = True 
    | otherwise = False 
    where 
     strippedWord = drop (length prefix) (take ((length word) - (length suffix)) word) 


wordfeud :: String -> String -> String -> [String] 
wordfeud a b c = test1 
    where 
    test =["horse","chair","chairman","bag","house","mouse","dirt","sport"] 

    test1 = [x| x <- test, a `isPrefixOf` x, b `isSuffixOf` x, check a b x c] 
+0

आपके कोड के बारे में दो छोटे संकेत: 1. हास्केल फ़ंक्शन एप्लिकेशन में इंफिक्स ऑपरेटरों की तुलना में एक मजबूत प्राथमिकता है। यही है, 'लम्बाई स्ट्रिपेड वर्ड == गिनती स्ट्रिपेड वर्ड स्क्वायर' जैसी अभिव्यक्ति '(लम्बाई स्ट्रिपेड वर्ड) == (गिनती स्ट्रिपेड वर्ड स्क्वायर) के बराबर है। 2. समारोह में 'चेक' समारोह का परिणाम समानता जांच का मूल्य है। इसलिए, आप समानता जांच द्वारा गार्ड (लंबवत सलाखों के साथ भाग) को प्रतिस्थापित कर सकते हैं। –

+0

आपका मतलब है कि मैं केवल इस लाइन के साथ गार्ड को प्रतिस्थापित कर सकता हूं "लंबाई strippedWord == गिनती छीनने वाला तार वर्ग = सही"? – tutu

+1

सटीक नहीं होने के लिए खेद है मेरा मतलब था कि आप 'प्रीफिक्स प्रत्यय शब्द वर्ग = लंबाई स्ट्रिप किए गए वर्ड == गिनती स्ट्रिपेड वर्ड स्क्वायर' का उपयोग कर सकते हैं। यही है, 'चेक' के आवेदन का नतीजा' == 'के आवेदन का परिणाम है। –

उत्तर

5

बहुत ही सरल, (या words, जब शब्द पंक्ति विराम से खाली स्थान के किसी अन्य प्रकार का से अलग कर रहे हैं) lines समारोह की मदद से:

-- Loads words from a text file into a list. 
getWords :: FilePath -> IO [String] 
getWords path = do contents <- readFile path 
        return (lines contents) 

इसके अलावा, आप शायद करना होगा हास्केल में आईओ पर पढ़ो (मैं 'io हैकसेल ट्यूटोरियल' googling की सलाह देते हैं), अगर आपने पहले से ऐसा नहीं किया है। आपको अपने कार्यक्रम में अंतःक्रियाशीलता पेश करने की भी आवश्यकता होगी।

+0

'शब्द' किसी भी सफेद जगह के लिए उपयोगी है, 'रेखाएं' मूल रूप से संकुचित विभाजन पैरामीटर वाले शब्दों का एक रूप है। उदाहरण के लिए: 'शब्द "हाय \ n कैसे \ n हैं \ n आप" -> ["हाय", "कैसे", "हैं", "आप"] '। –

+0

आप सही हैं। मैं जवाब थोड़ा और विशिष्ट बना दूंगा। – AardvarkSoup

+0

@AardvarkSoup मैं इसे काम करने के लिए नहीं मिल सकता। क्या मैं सिर्फ 'path' को अपने textfile '" dictionary.txt "के नाम से बदलता हूं? मैं कहां कोड का यह टुकड़ा कहां रखूं, 'कहां' और 'checkw = [x | के बीच एक्स <- test'? – tutu

संबंधित मुद्दे