我正在閱讀了解Haskell以及第40頁 - as-patterns。Haskell [x]和x表示法 - 作爲模式示例
我已經改變了例子略是:
firstLetter :: String -> String
firstLetter "" = "Empty string, oops"
firstLetter [email protected](x:xs) = "The first letter of " ++ all ++ " is " ++ [x] ++ " otherbit " ++ xs
然後可以使用這樣的:
*Main> firstLetter "Qwerty"
"The first letter of Qwerty is Q otherbit werty"
但我感到困惑的區別[X] x和爲什麼我在上面的例子中使用[x]。
例如,如果我改變
firstLetter :: String -> String
firstLetter "" = "Empty string, oops"
firstLetter [email protected](x:xs) = "The first letter of " ++ all ++ " is " ++ x ++ " otherbit " ++ xs
我得到錯誤:
Couldn't match expected type `[Char]' with actual type `Char'
In the first argument of `(++)', namely `x'
In the second argument of `(++)', namely `x ++ " otherbit " ++ xs'
In the second argument of `(++)', namely
`" is " ++ x ++ " otherbit " ++ xs'
我可以用xs
打印"werty"
但必須使用[x]
打印 「Q」。這是爲什麼?
[x]
是什麼意思?
在(x:xs
),:
只是劃定每個元素,所以x
是第一個元素。爲什麼我不能使用x
進行打印?
另外xs
是什麼類型?價值清單?那麼這是否意味着x
是一個元素,xs
必須是類型列表?
啊這是打印不起作用的原因。 –
是的,你試圖連接列表和元素,而不是兩個列表。 – Vladimir