有没有人知道在Haskell中以某种形式转换内容的方法
["w","o","r","d"]
进入
word
我刚刚完成了我的第一个程序(一个RSA加密),此刻的输出真的很难看。如果这是一个非常愚蠢的问题,我很抱歉,但我真的不知道如何去做。此外,为了使我的输入更容易,有没有人知道转换的方式
word
进入
[w,o,r,d]
答案 0 :(得分:10)
即使您从未听说过“concat”,也可以通过以下方式解决此类问题。让我们弄清楚你有什么类型:
λ> :t ["w","o","r","d"]
["w","o","r","d"] :: [[Char]]
好的,这是Char
的列表清单。
现在让我们弄清楚你想要的类型:
λ> :t "word"
"word" :: [Char]
所以我们想要一个将Char
列表的列表转换为Char
的简单列表的函数。换句话说,我们想要一个带有签名[[Char]] -> [Char]
的函数。让我们使用Hoogle搜索具有该类型签名*的函数。刚才这样做,列表中的第四个函数是:
concat :: [[a]] -> [a]
base Prelude, base Data.List
Concatenate a list of lists.
这正是我们想要的。
[[a]] -> [a]
。 (这种见解伴随着练习。)当我刚才这样做时,concat
是第一个结果。答案 1 :(得分:5)
检查类型:
Prelude> let s = ["w","o","r","d"]
Prelude> :t s
s :: [[Char]]
因此,您可以将其视为字符列表列表。
什么功能“扁平”列表?的concat:
Prelude> :t concat s
concat s :: [Char]
这就是我们的字符串,我们用putStrLn打印它
Prelude> putStrLn $ concat s
word
答案 2 :(得分:2)
正如其他人所说,concat
是将[[Char]]
转换为[Char]
的方法,至于另一种方式,您有两种选择。您可以将字符串"word"
视为Char
的列表(请记住,它的类型为String
,这只是[Char]
的别名)并且仅对其进行操作Char
代替String
s,或者您可以将每个单个字符转换为单个字符String
。我推荐前者,但我也会展示另一个。
最简单的方法是使用非常简单的列表理解。您所要做的就是从单词中获取每个字母,并将其包装在[]
中以使其成为列表。自String = [Char]
起,您将该单词的每个字母都设为String
。
splitUpWord :: String -> [String]
splitUpWord word = [[letter] | letter <- word]
答案 3 :(得分:1)
看看concat。你有一个字符列表列表。展平这是一种常见的模式,concat是实现它的工具。也就是说,如果你正在学习,你可以自己试一试。