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矢量编码中的此错误 newtype Vector2 a=Vector2(a,a) 推导(显示,等式) 实例向量空间向量2,其中 向量幅值(向量2(a,b))=(a**2+b**2)**(1/2) vecF::(浮动a,向量空间v)=>va->[va]->[a] vecF Vector2(a,b)ys=[Vector2(a+(-1)*a'),(b+(-1)*b'))|(a',b')_Haskell - Fatal编程技术网

如何解决Haskell矢量编码中的此错误 newtype Vector2 a=Vector2(a,a) 推导(显示,等式) 实例向量空间向量2,其中 向量幅值(向量2(a,b))=(a**2+b**2)**(1/2) vecF::(浮动a,向量空间v)=>va->[va]->[a] vecF Vector2(a,b)ys=[Vector2(a+(-1)*a'),(b+(-1)*b'))|(a',b')

如何解决Haskell矢量编码中的此错误 newtype Vector2 a=Vector2(a,a) 推导(显示,等式) 实例向量空间向量2,其中 向量幅值(向量2(a,b))=(a**2+b**2)**(1/2) vecF::(浮动a,向量空间v)=>va->[va]->[a] vecF Vector2(a,b)ys=[Vector2(a+(-1)*a'),(b+(-1)*b'))|(a',b'),haskell,Haskell,这里基本上有四个问题:两个问题可以很容易解决,其他问题需要更改签名,或者实现额外的功能: 您忘了在函数的开头写括号: 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) =&

这里基本上有四个问题:两个问题可以很容易解决,其他问题需要更改签名,或者实现额外的功能:

  • 您忘了在函数的开头写括号:

    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]
    
    vecF :: Floating a => Vector2 a -> [(a, a)] -> [a]
    vecF (Vector2 (a,b)) ys = [ vecMagnitude ( Vector2 (a-a',b-b')) |(a',b') <- ys ]
  • (无法用简单的方法解决)由于
    ys
    va
    s的列表,您不能仅从
    ys
    中枚举为:

    vecF (Vector2 (a, b)) = ...
    然后您可以将其实现为:

    class VectorSpace v where
        -- ...
        vecDiff :: Num a => v a -> v a -> v a
    vecF::(浮动a,向量空间v)=>va->[va]->[a]
    
    vecF v0 vs=[vecMagnitude(vecDiff v0 v1)| v1这里基本上有四个问题:两个问题可以很容易解决,其他问题需要更改签名,或者实现额外的功能:

  • 您忘了在函数的开头写括号:

    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]
    
    vecF :: Floating a => Vector2 a -> [(a, a)] -> [a]
    vecF (Vector2 (a,b)) ys = [ vecMagnitude ( Vector2 (a-a',b-b')) |(a',b') <- ys ]
  • (无法用简单的方法解决)由于
    ys
    va
    s的列表,您不能仅从
    ys
    中枚举为:

    vecF (Vector2 (a, b)) = ...
    然后您可以将其实现为:

    class VectorSpace v where
        -- ...
        vecDiff :: Num a => v a -> v a -> v a
    vecF::(浮动a,向量空间v)=>va->[va]->[a]
    
    vecF v0 vs=[vecMagnitude(vecDiff v0 v1)| v1您的示例缺少导入,您可以添加这些导入吗?@MichaelLitchard:这些是在中定义的,但您是正确的,最好包含这些导入,以使问题更“封闭”。您的示例是缺少导入,您可以添加这些吗?@MichaelLitchard:这些在中定义,但您是正确的,最好包含这些,以使问题更“封闭”。感谢您的快速响应,我想我已经做了您建议的更改。我的问题是,当我测试它时,我得到错误vecF(1,2)[(0,0),(1,1),(2,2)]…你知道怎么回事吗?@Yorkman:这里的参数是一个
    Vector2
    和一个2元组列表,你的第一个参数是一个2元组,所以它应该是
    vecF(Vector2(1,2))[(0,0),(1,1),(2,2)]
    。但我认为最后一种方法可能是最好的:实现一个函数,可以计算两个
    VectorSpace
    类型对象之间的差异。嗨……但是,当我尝试使用vecDiff(Vector2(1,2))[(0,0),(1,1),(2,2)]进行测试时,没有编译错误我发现以下错误无法将类型“(,)Integer”与预期类型“Vector2”匹配:Vector2实际类型:(Integer,a)在表达式中:(0,0)在“vecF”的第二个参数中,即表达式中的“[(0,0)、(1,1)、(2,2)]”:vecF(Vector2(1,2))[(0,0)、(1,1)、(2,2)]@约克曼:是的,如果您使用
    vecDif
    创建一个函数,您可以增加灵活性,第一个参数的向量空间与列表中的元素相同,但不是两个不同的元素,因此
    vecF(Vector2(1,2))[Vector2(0,0)]
    @Yorkman当问题发生变化时,请不要总是回过头来回答你提出的问题。首先,确保你真的尽了一切努力自己解决问题,并且这是值得的,然后就新问题提出一个新的、独立的问题。谢谢你的快速回答,我想我已经做出了改变我的问题是当我测试它的时候,我得到了错误向量向量(1,2)[(0,0),(1,1),(2,2)]…你知道怎么了吗?@Yorkman:这里的参数是一个
    Vector2
    和一个2元组列表,你的第一个参数是一个2元组,所以它应该是
    Vector2(1,2)][(0,0),(1,1),(2,2)]
    。但我认为最后一种方法可能是最好的:实现一个函数,可以计算两个
    VectorSpace
    类型对象之间的差异。嗨……但是,当我尝试使用vecDiff(Vector2(1,2))[(0,0),(1,1),(2,2)]进行测试时,没有编译错误我发现以下错误无法将类型“(,)Integer”与预期类型“Vector2”匹配:Vector2实际类型:(Integer,a)在表达式中:(0,0)在“vecF”的第二个参数中,即表达式中的“[(0,0)、(1,1)、(2,2)]”:vecF(Vector2(1,2))[(0,0)、(1,1)、(2,2)]@约克曼:是的,如果您使用
    vecDif
    创建一个函数,您可以增加灵活性,第一个参数的向量空间与列表中的元素相同,但不是两个不同的元素,因此
    vecF(Vector2(1,2))[Vector2(0,0)]
    @Yorkman当问题发生变化时,请不要不断地回过头来回答你提出的问题。首先,确保你真的尽了一切努力自己解决问题,并且这样做是值得的,然后就新问题提出一个新的、自成一体的问题。
    vecF :: (Floating a, VectorSpace v) => v a -> [v a] -> [a]
    vecF v0 vs = [ vecMagnitude (vecDiff v0 v1) | v1 <- vs ]