为什么“全部”?给我这个“无法匹配预期类型”?

发布于 2024-10-15 21:21:02 字数 564 浏览 1 评论 0原文

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

给出:

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)
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)

The command:

t m

gives:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴意少年 2024-10-22 21:21:02

原因是,您将符号all重新定义为t的参数。因此,本地 all 遮蔽了全局 all 并且您会收到此错误。作为解决方案,请尝试为本地all指定另一个名称。

The reason is, that you redefine the symbol all to the parameter of t. Thus, the local all shadows the global all and you get this error. As a solution, try to give your local all another name.

紫轩蝶泪 2024-10-22 21:21:02

您将名称 all 绑定到整个列表,因此前奏函数 all 不再可见。选择不同的名称,或者删除 all@ 并仅使用 let (m, n) = (length xs + 1, ...) 或类似的名称。

相关:为什么你要计算length all?你不在任何地方使用它。

You bind the name all to the whole list, so the prelude function all is no longer visible. Choose a different name, or drop the all@ and just use let (m, n) = (length xs + 1, ...) or something similar.

Relatedly: Why do you calculare length all at all? You don't use it anywhere.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文