正在尝试获取haskell中2字符串的首字母

正在尝试获取haskell中2字符串的首字母,haskell,Haskell,然后我打电话 initt [f:_] [l:_] = f ++ " " ++ l 我收到一个错误,说无法将类型“Char”与“[Char]”匹配 我真的不明白。我想你想要 initt "First" "Last" [f:\]相当于[(f:\],它将匹配类似[“First”] 另外,(++)可以处理字符串,而f和l应该是字符。充其量,你可以做一些类似于[c]++++“++[l]的事情,但是[f”,“l']更好更简单。++是列表连接。将f和l打包到列表中: initt (f:_) (l:_) =

然后我打电话

initt [f:_] [l:_] = f ++ " " ++ l
我收到一个错误,说无法将类型“Char”与“[Char]”匹配

我真的不明白。我想你想要

initt "First" "Last"
[f:\]
相当于
[(f:\]
,它将匹配类似
[“First”]

另外,
(++)
可以处理字符串,而
f
l
应该是字符。充其量,你可以做一些类似于
[c]++++“++[l]
的事情,但是
[f”,“l']
更好更简单。

++
是列表连接。将
f
l
打包到列表中:

initt (f:_) (l:_) = [f, ' ', l]
或者像Ingo建议的那样创建它:

[f] ++ " " ++ [l]
另外,头:尾上的模式匹配意味着它是一个列表,因此您只需要
(f:)
,而不是
[f:)

这就引出了整个解决方案:

[f, ' ', l]

它必须是
[f',,l]
“[f:u]相当于[(f:u)]”-为什么?一般来说,像
[a,b,c]
这样的模式将匹配具有指定长度的列表,在本例中为3<代码>[a]将列表与一个元素匹配。如果您使用类似于
[(f:\]
的模式,那么您将一个列表与一个元素相匹配,该元素本身就是一个头部绑定到
f
的列表。但是,在本例中,Haskell允许您删除括号,这样您就可以编写
[f:\u]
initt (f:_) (l:_) = [f, ' ', l]