List 将字母列表转换为单词(并删除语音标记)
有人知道Haskell中的一种方法来转换表单中的内容吗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]] 因此,您可以将其视为字符列表 什么函数“展平”列表?康卡
["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,我想澄清一下。谢谢,我的声誉不高