Haskell 将字符串(从文件)转换为元组时出现混乱

Haskell 将字符串(从文件)转换为元组时出现混乱,haskell,Haskell,我试图将两个文本文件转换成字符串,然后将它们以双元组的形式添加到列表中。像这样:[(,,,)(,)] 这是我的职责: testa = do questions <- readFile "questionsQ.txt" category <- readFile "category.txt" print (myZip category (lines questions)) myZip :: [a] -> [b] -> [(a, b)] myZi

我试图将两个文本文件转换成字符串,然后将它们以双元组的形式添加到列表中。像这样:
[(,,,)(,)]
这是我的职责:

testa = do  
    questions <- readFile "questionsQ.txt" 
    category <- readFile "category.txt"
    print (myZip category (lines questions))

myZip :: [a] -> [b] -> [(a, b)]
myZip [] [] = []
myZip _ [] = []
myZip (x:xs) (y:ys) = [(x,y)] ++ myZip xs ys

为什么它要将元组与空字符串结合起来?为什么会出现错误消息?

异常!这怎么可能呢?
这不是很讽刺吗。
但是有一个信息告诉你,
非详尽模式
就在这件事上
在您的
myZip
中找到


您缺少以下情况的模式:

myZip [] [1] = ???
如果使用了
-Wall
,编译器将发出以下警告:

Code.hs:2:1: Warning: Pattern match(es) are non-exhaustive In an equation for `myZip': Patterns not matched: [] (_ : _)
这样你就不会意外地错过一个模式。

一个例外!这怎么可能呢?
这不是很讽刺吗。
但是有一个信息告诉你,
非详尽模式
就在这件事上
在您的
myZip
中找到


您缺少以下情况的模式:

myZip [] [1] = ???
如果使用了
-Wall
,编译器将发出以下警告:

Code.hs:2:1: Warning: Pattern match(es) are non-exhaustive In an equation for `myZip': Patterns not matched: [] (_ : _)

这样你就不会意外地错过一个模式。

当第一个列表为空,第二个列表不是时,你对zip的预期是什么?Wall会警告你的模式不是详尽无遗的。我建议您打开它。我发现您得到这个输出是令人惊讶的,因为我希望结果是
[(Char,String)]
类型!顺便说一句,如果您对效率感兴趣,请看一下
,它可以用来(稍加修改)代替
++
@epsilonhalbe GHC足够聪明,可以为您进行
[x]++y=>x:y
转换;这很好,因为这意味着您可以使用这两种不同的形式来给出作者“意思”的微妙暗示。例如,
b++[m]++e
使
b
e
之间的对称性比
b++m:e
更清晰。但是,我同意作者应该在这里使用
。=)当第一个列表为空,而第二个列表不是时,您对zip的结果有何期望?Wall会警告您的模式并非详尽无遗。我建议您打开它。我发现您得到这个输出是令人惊讶的,因为我希望结果是
[(Char,String)]
类型!顺便说一句,如果您对效率感兴趣,请看一下
,它可以用来(稍加修改)代替
++
@epsilonhalbe GHC足够聪明,可以为您进行
[x]++y=>x:y
转换;这很好,因为这意味着您可以使用这两种不同的形式来给出作者“意思”的微妙暗示。例如,
b++[m]++e
使
b
e
之间的对称性比
b++m:e
更清晰。但是,我同意作者应该在这里使用
。=)我建议你的stackoverflow账户链接到。你应该以此为生。。。请让我在第三周继续订阅;)@斯奇伯恩:不客气。既然你是新来的,你可能会想。否则,你的问题在某些过滤器中会被视为“未回答”。@Carsten当然,让我开始一个kickstarter活动和/或patreon帐户,一些有Haskell故事的etsy页面,如“哭泣的男孩”,“多分支类型类和七个功能依赖”,“棱镜和镜头”,然后我等待钱。这就是它的工作原理,对吗我建议你的stackoverflow账户链接到。你应该以此为生。。。请让我在第三周继续订阅;)@斯奇伯恩:不客气。既然你是新来的,你可能会想。否则,你的问题在某些过滤器中会被视为“未回答”。@Carsten当然,让我开始一个kickstarter活动和/或patreon帐户,一些有Haskell故事的etsy页面,如“哭泣的男孩”,“多分支类型类和七个功能依赖”,“棱镜和镜头”,然后我等待钱。这就是它的工作原理,对吗D