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

List 将字母列表转换为单词(并删除语音标记),list,haskell,output,List,Haskell,Output,有人知道Haskell中的一种方法来转换表单中的内容吗 ["w","o","r","d"] 进入 我刚刚完成了我的第一个程序(RSA加密),目前的输出非常糟糕。如果这是一个非常愚蠢的问题,我很抱歉,但我真的不知道该怎么做。另外,为了让我的输入更容易,有人知道转换的方法吗 word 进入 检查类型: Prelude> let s = ["w","o","r","d"] Prelude> :t s s :: [[Char]] 因此,您可以将其视为字符列表 什么函数“展平”列表?康卡

有人知道Haskell中的一种方法来转换表单中的内容吗

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

我刚刚完成了我的第一个程序(RSA加密),目前的输出非常糟糕。如果这是一个非常愚蠢的问题,我很抱歉,但我真的不知道该怎么做。另外,为了让我的输入更容易,有人知道转换的方法吗

word
进入

检查类型:

Prelude> let s = ["w","o","r","d"]
Prelude> :t s
s :: [[Char]]
因此,您可以将其视为字符列表

什么函数“展平”列表?康卡特:

Prelude> :t concat s
concat s :: [Char]
这就是我们的字符串,我们用putStrLn打印它

Prelude> putStrLn  $ concat s
word
检查类型:

Prelude> let s = ["w","o","r","d"]
Prelude> :t s
s :: [[Char]]
因此,您可以将其视为字符列表

什么函数“展平”列表?康卡特:

Prelude> :t concat s
concat s :: [Char]
这就是我们的字符串,我们用putStrLn打印它

Prelude> putStrLn  $ concat s
word

看看海螺。您有一个字符列表。展平这是一种常见的模式,concat是实现这一点的工具。也就是说,如果你正在学习,你可以自己尝试一下

看看海螺。您有一个字符列表。展平这是一种常见的模式,concat是实现这一点的工具。也就是说,如果你正在学习,你可以自己尝试一下

正如其他人所说,
concat
是将
[[Char]]
转换为
[Char]
的方法,至于另一种方法,您有两种选择。您可以将字符串
“word”
视为
Char
的列表(记住,它的类型是
string
,它只是
[Char]
的别名),只需对
Char
进行操作,而不是对
string
进行操作,或者您可以将每个字符转换为单个字符
string
。我推荐前者,但我也将演示另一个

最简单的方法是使用一个非常简单的列表理解。你所要做的就是从单词中提取每个字母,并用
[]
将其包装成一个列表。因为
String=[Char]
,所以单词的每个字母都是
字符串

splitUpWord :: String -> [String]
splitUpWord word = [[letter] | letter <- word]
splitUpWord::String->[String]

splitUpWord=[[letter]| letter正如其他人所说,
concat
是将
[[Char]]
转换为
[Char]
的方法,至于另一种方法,您有两种选择。您可以将字符串
“word”
视为
Char
的列表(记住,它的类型是
String
,它只是
[Char]
的别名)只需在
Char
s上操作,而不是
String
s,或者您可以将每个字符转换为单个字符
String
。我推荐前者,但我也将演示另一个字符

最简单的方法是通过一个非常简单的列表理解。你所要做的就是从单词中提取每个字母,并将其包装在
[]
中,使其成为一个列表。由于
字符串=[Char]
,你可以将单词的每个字母作为
字符串

splitUpWord :: String -> [String]
splitUpWord word = [[letter] | letter <- word]
splitUpWord::String->[String]

splitUpWord=[[letter]| letter即使您从未听说过“concat”,下面是您解决此类问题的方法。让我们看看您的问题类型:

λ> :t ["w","o","r","d"]
["w","o","r","d"] :: [[Char]]
好的,这是
Char
s的列表

现在,让我们找出您想要的类型:

λ> :t "word"
"word" :: [Char]
因此,我们需要一个函数,该函数将
Char
s列表转换为
Char
s的简单列表。换句话说,我们需要一个签名为
[[Char]]->[Char]
的函数。让我们使用搜索该类型签名为*的函数。刚才这样做时,列表中的第四个函数是:

concat :: [[a]] -> [a]
base Prelude, base Data.List
Concatenate a list of lists. 
这正是我们想要的

  • 更好的是,您可能已经意识到我们需要的操作可以处理任何类型的列表。然后您将搜索类型签名
    [[a]]->[a]
    (这种洞察来自实践)。当我刚才这样做时,
    concat
    是第一个结果

即使您从未听说过“concat”,下面是您如何解决此类问题的方法。让我们看看您有什么类型的问题:

λ> :t ["w","o","r","d"]
["w","o","r","d"] :: [[Char]]
好的,这是
Char
s的列表

现在,让我们找出您想要的类型:

λ> :t "word"
"word" :: [Char]
因此,我们需要一个函数,该函数将
Char
s列表转换为
Char
s的简单列表。换句话说,我们需要一个签名为
[[Char]]->[Char]
的函数。让我们使用搜索该类型签名为*的函数。刚才这样做时,列表中的第四个函数是:

concat :: [[a]] -> [a]
base Prelude, base Data.List
Concatenate a list of lists. 
这正是我们想要的

  • 更好的是,您可能已经意识到我们需要的操作可以处理任何类型的列表。然后您将搜索类型签名
    [[a]]->[a]
    (这种洞察来自实践)。当我刚才这样做时,
    concat
    是第一个结果

我不能对你的回答投赞成票,因为我的声誉不够高,但非常感谢你,我现在将尝试应用这个。这可能是一个非常愚蠢的问题,但我现在如何应用你给我的操作?你提到的Hoogle使这个回答比其他回答好得多。Hoogle是一个非常宝贵的工具当你与Haskell合作时!我不能投票赞成你的回答,因为我的声誉不够高,但非常感谢你,我现在将尝试应用这个。这可能是一个非常愚蠢的问题,但我现在如何应用你给我的操作?你提到的Hoogle使这个回答比其他回答好得多。当你与Haskell合作时,Hoogle是一个非常宝贵的工具!谢谢,我的声誉不足以支持你的答案,但在我整理完问题的第一部分后,我会尝试一下:)另一种(更惯用的)方法是
splitupford=map(:[])
@kqr这是我的第一个解决方案,但为了用户2710971,我想澄清一下。谢谢,我的声誉不高