繁体   English   中英

如何解决带有矢量的Haskell编码中的此错误

How do I resolve this error in Haskell coding with vector

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

newtype Vector2 a = Vector2 (a,a)
   deriving (Show,Eq)

instance VectorSpace Vector2 where 
  vecMagnitude (Vector2 (a,b)) = (a**2 + b**2)**(1/2)

vecF :: (Floating a, VectorSpace v) => v a -> [v a] -> [a]
vecF Vector2 (a,b) ys = [ vecMagnitude ( Vector2 (a+(-1)*a'),(b+(-1)*b') ) |(a',b') <- ys ]

所以上面的编码我有错误是vecF函数,请参见以下错误msg:

Couldn't match type ‘v’ with ‘(,) a0’
  ‘v’ is a rigid type variable bound by
    the type signature for:
      vecF :: forall a (v :: * -> *).
              (Floating a, VectorSpace v) =>
              v a -> [v a] -> [a]
    at Assign_2_EC_test.hs:74:1-58
  Expected type: v a
    Actual type: (a0, a)

In the pattern: (a, b)
  In an equation for ‘vecF’:
      vecF (a, b) ys
        = [vecMagnitude ((a + (- 1) * a'), (b + (- 1) * b')) |
             (a', b') <- ys]
Relevant bindings include
    vecF :: v a -> [v a] -> [a]

知道是什么错误

1 个回复

这里基本上有四个问题:两个可以轻松解决,另一个则需要更改签名或实现额外的功能:

  1. 您忘记在函数的开头写括号:

     vecF (Vector2 (a,b)) ys = ... 
  2. 列表理解的“收益”部分中的方括号没有构成元组的方括号:

     [ vecMagnitude (Vector2 (a+(-1)*a', b+(-1)*b') ) | ... ] 
  3. 在您的签名您允许的第一个参数是任何vav一个VectorSpace类型, a一个Floating类型,所以你不能只是增加一个构造函数,如:

     vecF (Vector2 (a, b)) = ... 
  4. (不能直接解决)因为ysva的列表,所以不能仅从ys枚举为:

     [ ... | (a', b') <- ys ] 

最后两个问题不能轻易解决,我们可以对签名进行专门化处理,例如:

vecF :: Floating a => Vector2 a -> [(a, a)] -> [a]
vecF (Vector2 (a,b)) ys = [ vecMagnitude ( Vector2 (a-a',b-b')) |(a',b') <- ys ]

但是我们当然可以灵活地松散使用其他VectorSpace ,例如,另一个选择是将vecF移到class定义并在instance子句中实现。 最后,另一个选择可能是制作额外的函数,这样就不需要模式匹配来计算vecMaginute ,例如,您可以实现一个函数:

class VectorSpace v where
    -- ...
    vecDiff :: Num a => v a -> v a -> v a

然后您可以将其实现为:

vecF :: (Floating a, VectorSpace v) => v a -> [v a] -> [a]
vecF v0 vs = [ vecMagnitude (vecDiff v0 v1) | v1 <- vs ]
1 如何解决此编码错误

这是我的代码,用于在7段上写两个小数。 我已经使用过AN0和AN1。 我收到了这个非常奇怪的错误,我不知道如何解决,我的案例结构是否有问题? 这个错误是什么意思? 任何帮助,将不胜感激 这是奇怪的错误 ...

2014-05-13 13:56:17 2 125   vhdl
3 如何解决此错误?

请帮我解决这个问题: } 如果执行了程序段中的代码,将出现以下警告: 故障的位置请参考以下代码: 我该如何解决? ...

2013-01-12 16:49:02 3 83   php
4 如何解决 haskell 中的歧义类型运行时错误?

我有这个haskell函数,它计算这个无限列表给定位置的数字: 因此,对于第 n 个新数字,列表将是 l(n-1) ++ [n] ++ l(n-1)。 我已经实现了这个功能: 但是当我像这样运行它时: getNumb 10我收到这个错误: 据我了解,问题在于函数的返回类型与输入类型不兼容 ...

6 如何在Haskell中编写Data.Vector.Unboxed实例?

我有一个数字应用程序,它使用概率的负对数做了很多工作,其中(因为概率范围从0到1)取正双精度值或负无穷大值(如果潜在概率为零)。 我使用newtype Score如下: 现在,在Viterbi算法的实现中,我一直在使用Data.Vector ,实际上我有一些Score的Data.V ...

9 如何通过编码解决这个二项式方程?

我在找出如何发现 write 函数来解决这个问题时遇到了问题: 编写一个函数,将两个数字 (l,m)作为输入,并以元组形式返回二次方程 ax^2 + bx + c的系数 (a,b,c) 展开(x + l) * (x + 米) 。 ...

2020-09-24 15:10:25 2 46   python
10 如何在Haskell中测试错误?

我希望能够确保函数在接收到无效值时会抛出错误。 例如,假设我有一个只返回正数的函数pos: 这是一个简单的例子,但我希望你能得到这个想法。 我希望能够编写一个期望出现错误的测试用例并将其视为通过测试。 例如: [我的解决方案] 这是我最终根据@ hammar的评论 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM