2014-11-15 59 views
0

給出一個字符串,我需要一個函數,它返回一個由原始字符串中的每個字符替換字母表中每個小寫字母形成的字符串列表。例如"car" - >["aar","bar","dar",....,"cbr","ccr",...]。 我嘗試這樣做:用所有字母字符替換字符串中的所有字符的函數Haskell

replaced1 :: String -> [String] 
replaced1 [] = [] 
replaced1 (x:xs) = [h ['a'..'z'] : map (x:) (replaced1 xs) 
     where h[] = [] 
       h c= head c (h(tail c)) 

,但它在where給我解析錯誤。我只是在學習Haskell,所以我沒有使用這種錯誤。我該如何解決這個問題?

+1

解析錯誤。 – chaosmasttter

+0

謝謝,但現在我仍然在輸入「=」在最後一行得到一個解析錯誤 –

+0

你是混合標籤和空格嗎?嘗試只使用空格。 – chaosmasttter

回答

1

有幾件事。首先,它看起來像在考慮使用列表理解[h ['a'..'z']...您試圖用系列['a' .. 'z']中的每個字符替換字符串的第一個字符。其語法是[h c | c <- ['a'..'z']]。如果您需要澄清,或者如果這不符合您的想法,請在評論中提問(或修改您的帖子)。二,h的類型應爲Char -> String。需要替換字符,然後將其餘的輸入用於replaced1(即xs)。

三,合併名單使用(++)不是:map (x:) (replaced1 xs)的類型是[String],但您添加的類型也是如此。

這裏是固定的版本,有位留給你填寫。

replaced1 :: String -> [String] 
replaced1 [] = [] 
replaced1 (x:xs) = [h c | c <- ['a'..'z']] ++ map (x:) (replaced1 xs) 
     where h :: Char -> String 
       h c = {- left as exercise -} 
爲`replaced1`你有一個`[`但沒有`]`,這就是爲什麼它給你的最後一個方程中
相關問題