+和 - 之间交替的交叉和

时间:2016-04-25 13:03:21

标签: haskell

这是我已编写的代码。我能够得到一个整数的交叉和。

module Blueprint where
import Prelude

crosssum :: Integer -> Integer -> Integer
crosssum i n 
    |n < 1*10^i = n
    |otherwise = let(d,m)=n`divMod` (1*10^i)  in  m + crosssum i d 


crosssumalt :: Integer -> Integer -> Integer
crosssumalt i n 
    |n < 1*10^i = n
    |n < 0 = let(d,m)=n`divMod`(1*10^i) in  m + crosssumalt i d 
    |otherwise = let(d,m)=n`divMod`(1*10^i) in  m - crosssumalt i d 


gencrosssum :: Integer -> Bool -> Integer -> Integer
gencrosssum i bool n
    |bool==False=crosssum i n   
    |otherwise=crosssumalt i n

我的问题是,如果用户在参数中键入Bool“True”,它应该这样做:54321 = -5 + 43 - 21 = 17或1234567 = 1 - 234 + 567 = 334.错误是正常的交叉总和。所以gencrosssum True 54321给了我-17而不是17(它应该总是给出一个正整数)。我的想法是在crossumalt中设置一个可以将负面转为正面的守卫,但是在守卫中筑巢的守卫会给我解析错误。也许有人会如此友善地给我一个更好的解决方案,或者告诉我如何能够将一个警卫放在gencrosssum中,将负面变成积极的。

0 个答案:

没有答案