我在Haskell中实现此功能时遇到了一些麻烦.这是我到目前为止:
--Extend coprime to a function on lists:
--coprime_with n list = True exactly when n is coprime with
--every element of list.
coprime_with :: Integer -> [Integer] -> Bool
coprime_with a [] = False
coprime_with a (b:bs) = if ((coprime a b) == True) then
(coprime_with a bs)
else False
Run Code Online (Sandbox Code Playgroud)
希望这不是太混乱.请不要只给我答案.只是让我知道我做错了什么以及如何解决它.谢谢!
编辑:好的,所以我想出来了!非常感谢您的回复.它非常快.我是Comp Sci专业,这是我的第一个学期.我的目标是实际学习,而不仅仅是通过它.感谢您的回复以及您的措辞.
我的问题是这样的:
coprime_with a [] = False
Run Code Online (Sandbox Code Playgroud)
什么时候应该这样:
coprime_with a [] = True
Run Code Online (Sandbox Code Playgroud)
现在它正常运作.Phew ...我觉得很愚蠢,我花了五个小时写这个功能,但至少我实际上学到了一些东西.再次感谢!
所以我在尝试将中国剩余定理实现到Haskell时遇到了问题.到目前为止我有这个:
minv :: Integer -> Integer -> Integer
minv a m = let (1, x, _) = extGCD a m
in x `mod` m
crt :: [Integer] -> [Integer] -> Integer
crt as ms = let
prod = product ms
big_m = [div prod i| i <- ms]
in (zip as ms (\(ai,mi)) ((ai * big_m * (minv mi big_m)) `mod` prod))
Run Code Online (Sandbox Code Playgroud)
好的,所以我知道这个minv功能有效(我已多次测试过),但我无法使用该crt功能.所以这就是我想要做的:
我需要压缩列表as和ms在一起,然后应用二进制文件中的每一个,实际上认定中国剩余定理公式.但是我需要先处理二进制文件然后应用于`mod` prod我从所有二进制文件中获得的整数.
希望这会产生某种形式的意义.
提前致谢.