将字母列表转换为单词(并删除语音标记)

时间:2013-08-23 12:22:04

标签: list haskell output

有没有人知道在Haskell中以某种形式转换内容的方法

["w","o","r","d"]

进入

word

我刚刚完成了我的第一个程序(一个RSA加密),此刻的输出真的很难看。如果这是一个非常愚蠢的问题,我很抱歉,但我真的不知道如何去做。此外,为了使我的输入更容易,有没有人知道转换的方式

word

进入

[w,o,r,d]

4 个答案:

答案 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是实现它的工具。也就是说,如果你正在学习,你可以自己试一试。