Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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中bezout系数的计算_Haskell - Fatal编程技术网

haskell中bezout系数的计算

haskell中bezout系数的计算,haskell,Haskell,所以我一直在尝试计算贝佐特系数。我看到的所有解决方案都是同时计算GCD的。我已经有了一个方法 这是我尝试过的代码的不同部分 computeCoeffs :: Int -> Int -> (Int, Int) computeCoeffs :: Int -> Int -> (Int, Int) computeCoeffs a b = let bq = a - r; (q, r) = a `quotRem` b in if b == 0

所以我一直在尝试计算贝佐特系数。我看到的所有解决方案都是同时计算GCD的。我已经有了一个方法

这是我尝试过的代码的不同部分

computeCoeffs :: Int -> Int -> (Int, Int)
computeCoeffs :: Int -> Int -> (Int, Int)
computeCoeffs a b =
  let bq = a - r; (q, r) = a `quotRem` b 
           in if b == 0 
              then (1, 0)
              else ((v, (u - q * v)) = computeCoeffs (a, b))
                    where a * v + b * (u - q * v) = gcd (a, b)
或者代替最后几行

 let (q, r) = a `quotRem` b
 let r = a - bq
 | b == 0 = (1, 0)
 | otherwise (v, (u-qv)) = computeCoeffs (a, b)
     where a * v + b(u - q * v) = gcd (a, b)

我尝试过切换let位置、删除或添加保护,但它仍然会抛出错误。

类似的方法应该可以工作,需要处理“零除”错误的边缘情况


参考资料:

你能给一些错误的提示吗?在作业
(v,(u-qv))=computecoefs(a,b)
中,你希望如何解决这个问题?这个尝试表明了一种理解,通过一些研究可以大大提高。好吧,我需要知道学习什么,从哪里开始,正确的?正如你所猜测的,“研究哈斯克尔”的答案太笼统了。我给了你一个特定文本的名称。学习语言的基础知识。
computeCoeff a b = go a b 1 0 0 1
     where go a b s0 s1 t0 t1 | r==0 = (s1,t1)
                              | otherwise = go b r s1 s t1 t
                              where (q,r) = quotRem a b
                                    (s,t) = (s0-s1*q, t0-t1*q)

> computeCoeff 240 46
(-9,47)