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_Map_Matrix - Fatal编程技术网

Haskell 为什么;“全部”;是给我这个",;不能';与预期类型“不匹配”;?

Haskell 为什么;“全部”;是给我这个",;不能';与预期类型“不匹配”;?,haskell,map,matrix,Haskell,Map,Matrix,命令: m = [[1,0,0],[2,-3,0],[4,5]] t all@(x:xs) = let (m, n) = (length all, length x) in all (==n) (map length all) 给出: t m 您将名称all绑定到整个列表,因此前奏曲函数all不再可见。选择一个不同的名称,或者删除all@,只需使用let(m,n)=(长度xs+1,…)或类似的名称即可 相关的:你为什么要计算所有的长度?您不会在任何地方使用它。您将名称all绑定到整个列表,因

命令:

m = [[1,0,0],[2,-3,0],[4,5]]
t all@(x:xs) = let (m, n) = (length all, length x) in all (==n) (map length all)
给出:

t m

您将名称
all
绑定到整个列表,因此前奏曲函数
all
不再可见。选择一个不同的名称,或者删除
all@
,只需使用
let(m,n)=(长度xs+1,…)
或类似的名称即可


相关的:你为什么要计算所有的
长度
?您不会在任何地方使用它。

您将名称
all
绑定到整个列表,因此前奏曲函数
all
不再可见。选择一个不同的名称,或者删除
all@
,只需使用
let(m,n)=(长度xs+1,…)
或类似的名称即可


相关的:你为什么要计算所有的
长度
?您不能在任何地方使用它。

原因是,您将符号
all
重新定义为
t
的参数。因此,本地
all
会对全局
all
产生阴影,您会得到此错误。作为解决方案,尝试为本地
all
另起一个名称。

原因是,您将符号
all
重新定义为
t
的参数。因此,本地
all
会对全局
all
产生阴影,您会得到此错误。作为一个解决方案,试着给你的本地
all
取另一个名字。

我认为Haskell足够聪明,除了阴影之外,还可以理解“all”的不同语义。悲哀的Thanks@Gremo:它是否应该猜测您所指的潜在众多
所有
中的哪一个?一个名字指的是一件事,这是一件好事——有利于复杂性预算,有利于简单性,有利于对代码进行推理。@delnan:这只是我作业中的一个步骤,试图检查矩阵m是否有效(每行的列数相等)。(m,n)是retval。@Gremo:真正的问题是,如果haskell猜,它可能猜错了,你的程序可能是不可预测的。但是您可以使用类型类让编译器猜测,但不是按照您希望的方式。@fuzzxl:TypeClass严格来说不是猜测,因为(标准非扩展)Haskell中的(afaik)类型推断必须始终为给定程序生成一个正确的结果,所以只有一个类型(类)这是可以推断的。我认为哈斯凯尔足够聪明,除了阴影之外,他还能理解“所有”的不同语义。悲哀的Thanks@Gremo:它是否应该猜测您所指的潜在众多
所有
中的哪一个?一个名字指的是一件事,这是一件好事——有利于复杂性预算,有利于简单性,有利于对代码进行推理。@delnan:这只是我作业中的一个步骤,试图检查矩阵m是否有效(每行的列数相等)。(m,n)是retval。@Gremo:真正的问题是,如果haskell猜,它可能猜错了,你的程序可能是不可预测的。但是您可以使用类型类让编译器猜测,但不是按照您希望的方式。@fuzzxl:TypeClass不是猜测,严格来说,因为(标准非扩展)Haskell中的(afaik)类型推断必须始终为给定程序生成一个正确的结果,所以只能推断一个类型(类)。
Couldn't match expected type `(Int -> Bool) -> [Int] -> t'
       against inferred type `[[a]]'
In the expression: all (== n) (map length all)
In the expression:
    let (m, n) = (length all, length x) in all (== n) (map length all)
In the definition of `t':
    t (all@(x : xs))
           = let (m, n) = ... in all (== n) (map length all)