我有这段代码:
censName :: String -> String
censName [] = []
censName xs = unwords(censWords(words xs))
censWords :: [String] -> [String]
censWords [] = []
censWords (x:xs) = if isUpper(head x) then replace(tail x) else censWords xs
replace :: String -> String
replace [] = []
replace (x:xs) = '*':replace xs
错误说:
Couldn't match type ‘Char’ with ‘[Char]’
Expected type: [String]
Actual type: String
我的问题是:为什么!?我的意思是,在替换(尾部x)x是一个字符串,为什么它需要[String]?
我找不到任何适合我在这里发布的类似问题的问题。
答案 0 :(得分:2)
censWords :: [String] -> [String]
-- ^^^^^^^^ expected
censWords (x:xs) = if .. then replace(tail x) else ..
-- ^^^^^^^^^^^^^^^ actual value
返回的值是单个字符串,但是需要一个字符串列表。
问题不是对replace
的调用,而是它返回的错误类型的值比预期的值。