Haskell如何将首字母与姓氏拼接为规范全名?
解决Haskell中生成规范全名的问题
直接上可行的纯函数实现,完全不需要IO操作:
import Data.List (intercalate) formatFullName :: String -> String -> String formatFullName initials surname = intercalate ". " (map (:[]) initials) ++ ". " ++ surname
为什么之前的尝试不对?
- 用
intersperse '.'只能插入单个字符,没法实现.(点加空格)的分隔要求,所以直接排除。 map show initials会把每个字符转成带单引号的字符串(比如'H'变成"'H'"),这是因为show对Char类型的输出就是带引号的表示,不是我们要的单字符字符串。而map (:[]) initials可以把每个字符直接转成单元素字符串列表,比如"HB"会变成["H", "B"],这才是intercalate需要的输入。
测试效果
调用formatFullName "HB" "Curry"会直接返回"H. B. Curry",完全符合格式要求。
内容的提问来源于stack exchange,提问作者k-shar
相关产品推荐
相关产品推荐

