Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我的代码有什么问题_Haskell - Fatal编程技术网

Haskell 我的代码有什么问题

Haskell 我的代码有什么问题,haskell,Haskell,可能重复: 我所做的有什么不对 我有一个列表[(Char,Int)],我需要按数字复制Char,我需要将它放入一个字符串中,所以[(Char,Int)]->string 比如说 decode['a',9']将返回“aaaaaaaaaaa”有什么问题: decode a b = replicate a b ?代码中存在一些语法问题。首先,元组是用逗号编写的,因此decodeheloper中的模式应该像(n,x),而不是(nx)。编译器将后者解释为调用函数n,将x作为参数传递,这当然不是您的意思

可能重复:

我所做的有什么不对

我有一个列表
[(Char,Int)]
,我需要按数字复制Char,我需要将它放入一个字符串中,所以
[(Char,Int)]->string

比如说

decode['a',9']
将返回
“aaaaaaaaaaa”

有什么问题:

decode a b = replicate a b

代码中存在一些语法问题。首先,元组是用逗号编写的,因此
decodeheloper
中的模式应该像
(n,x)
,而不是
(nx)
。编译器将后者解释为调用函数
n
,将
x
作为参数传递,这当然不是您的意思

事实证明,
n
等于
1
不需要特殊情况。只需使用
replicate 1x
即可获得所需的
[x]
。它还证明了空列表的特殊情况是不必要的,因为应用于空列表的
concatMap f
也会产生空列表。因此,删除这些不必要的案例并清理代码,您就可以

decode = concatMap decodeHelper
  where decodeHelper (n, x) = replicate n x
另一个(稍微高级一点的)变化是使用
uncurry
而不是在where子句中显式写入
decodeheloper
,从而产生非常简单易读的:

decode = concatMap (uncurry replicate)

您的
decode助手
具有错误的呼叫签名。如果在每个地方都输入期望的函数签名,那么编译器可能会得到更好的结果,这样类型检查器就可以告诉您哪里出错了


具体来说,您的表达式
(1 x)
(nx)
的类型不是
(char,int)
,因此它们与您输入的列表中的类型不匹配。您需要将它们设置为
(1,x)
(n,x)
,才能使模式匹配真正起作用。

您想做什么,以什么方式做不到?不要只说“它不工作”,我们需要更多的信息。相同用户的副本:。在这三个中,这个头衔最差。你知道,你可以编辑你的问题。根据阿桑的描述,这实际上不行——他需要类似于
decode=concatMap(uncurry replicate)
的东西。
decode = concatMap (uncurry replicate)