在Haskell中将列表拆分为列表列表
在Haskell中将列表拆分为列表列表,haskell,Haskell,decodeText应该split'将每个单词的代码分成更小的列表code。然后将单词中每个字符的code列表拆分为更小的code decodeText :: Table -> Code -> String decodeText table code= map (split' shortGap) (split' mediumGap code) 当我加载程序时,此代码给出以下错误: Summative2-test.hs:92:25: error: • Couldn't ma
decodeText
应该split'
将每个单词的代码分成更小的列表code
。然后将单词中每个字符的code
列表拆分为更小的code
decodeText :: Table -> Code -> String
decodeText table code= map (split' shortGap) (split' mediumGap code)
当我加载程序时,此代码给出以下错误:
Summative2-test.hs:92:25: error:
• Couldn't match type ‘[[Atom]]’ with ‘Char’
Expected type: String
Actual type: [[[Atom]]]
• In the expression: map (split' shortGap) (split' mediumGap code)
In an equation for ‘decodeText’:
decodeText table code
= map (split' shortGap) (split' mediumGap code)
|
92 | decodeText table code= map (split' shortGap)(split' mediumGap code)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Failed, one module loaded.
我不明白我在这里哪里犯了错误
我只是想在这个项目的一小部分上寻求帮助
以下是一个例子:
encodeText morseTable "THIS IS A TEST" = [Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Silence,Beep,Beep,Beep,Silence,Silence,Silence,Silence,Silence,Silence,Silence,Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Beep,Beep,Silence]
我的计划方法是首先用delimeter[静默,静默,静默,静默,静默]
拆分code
这将使:
[[Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep],
[Silence,Beep,Silence,Beep,Beep,Beep],[Silence,Beep,Beep,Beep,Silence,Silence,Silence,Beep,Silence,Silence,Silence,Beep,Silence,Beep,Silence,Beep,Silence,Silence,Silence,Beep,Beep,Beep,Silence]]
然后,我尝试使用[静默,静默]
作为delimeter来拆分每个列表
[[[Beep,Beep,Beep],[Silence,Beep,Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep]],[[Silence,Beep,Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep]],
[Silence,Beep,Silence,Beep,Beep,Beep],[[Silence,Beep,Beep,Beep],[Silence,Beep],[Silence,Beep,Silence,Beep,Silence,Beep],[Silence,Beep,Beep,Beep,Silence]]]
此代码已导入:
module Types where
data Atom = Beep | Silence
deriving (Eq, Show)
type Code = [Atom]
dit, dah, shortGap, mediumGap :: Code
dit = [Beep, Silence]
dah = [Beep, Beep, Beep, Silence]
shortGap = replicate (3-1) Silence
mediumGap = replicate (7-1) Silence
type Table = [(Char, Code)]
morseTable :: Table
morseTable = [ (c , morseCode c) | c <- ['A'..'Z']++['0'..'9'] ]
解码文本的正确类型为:
decodeText :: Table -> Code -> [[[Atom]]]
decodeText table code = map (split' shortGap) (split' mediumGap code)
您编写的类型使用String
作为返回类型。由于String
等于[Char]
,编译器试图使[[[Atom]]]]]
等于[Char]
,因此错误[[Atom]]
与Char
不匹配。
`“请为我编写代码”不是一个有效的堆栈溢出问题。我只是在函数的一小部分上寻求帮助。那么,除了那一部分之外,所有问题都无关紧要。
decodeText :: Table -> Code -> [[[Atom]]]
decodeText table code = map (split' shortGap) (split' mediumGap code)