0
initials :: String -> String -> String
initials firstname lastname = [f] ++ ". " ++ [l] ++ "."
    where (f:_) = firstname
          (l:_) = lastname 

对于这段代码。我有错误

parse error on input `='

为什么?

4

2 回答 2

4

where在关键字之前使用制表符。对于 GHC,它看起来像这样:

␉       where␠(f:_)␠=␠firstname
␠␠␠␠␠␠␠␠␠(l:_)␠=␠lastname 

因此,GHC 认为where块中的第一行从第 14 列开始(标签计数为 8 列 iirc),而第二行从第 9 列开始,这会导致错误。

您应该使用一个很好的文本编辑器,它可以为您将制表符转换为 4 个空格。

于 2012-05-06T01:39:26.247 回答
4

顺便说一句,您不需要辅助函数,您可以直接对参数进行模式匹配

initials :: String -> String -> String
initials (f:_) (l:_) = [f,'.',' ',l,'.']
于 2012-05-06T09:43:04.720 回答