getNames 'A' [('A', "Smith"), ('J', "Brown")] -> ["A.Smith", "A.Brown"]
我嘗試將 char 添加到串列中的每個字串元素。我的代碼是:
addForEvery :: Char -> [String] -> [String]
addForEvery a (x:xs) = [a] x : addForEvery a xs
print(addForEvery 'a' ["fa"])
但我收到以下錯誤:
jdoodle.hs:6:32: error:
? Couldn't match type ‘[Char]’ with ‘Char’
Expected type: [Char]
Actual type: [String]
? In the second argument of ‘( )’, namely ‘x : addForEvery a xs’
In the expression: [a] x : addForEvery a xs
In the expression: [[a] x : addForEvery a xs]
|
6 | addForEvery a (x:xs) = [[a] x : addForEvery a xs]
| ^^^^^^^^^^^^^^^^^^^^
uj5u.com熱心網友回復:
做到了!
getNames :: Char -> [(Char, String)] -> [String]
getNames a [] = []
getNames a ((z, b):xs) = ([a] ['.'] b) : getNames a xs
uj5u.com熱心網友回復:
問題是它[a] x : addForEvery a xs被解釋為[a] (x : addForEvery a xs). 這使得沒有太大的意義,因為[a]是一個String,它期望x : addForEvery a xs,但畢竟是一個串列String秒。
您可以使用map :: (a -> b) -> [a] -> [b]對串列中的所有專案應用相同的功能。因此,我們可以將其實作為:
getNames :: [(Char, String)] -> [String]
getNames = map toFullName
where toFullName fn ln = fn : '.' : ln
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/370711.html
