Haskell 数域之和
编写一个名为Haskell 数域之和,haskell,recursion,Haskell,Recursion,编写一个名为rangeSum的函数,该函数接受两个整数,并返回从第一个整数到第二个整数(包括第一个整数)的所有整数的总和。我还没有定义如果第二个参数更大,函数会做什么,比如rangeSum 5 3。在这里什么是明智的行为 这是我到目前为止编写的代码: rangeSum :: Integer -> Integer -> Integer rangeSum x y | x == y = 0 | x > y = error "rangeSum: First
rangeSum
的函数,该函数接受两个整数,并返回从第一个整数到第二个整数(包括第一个整数)的所有整数的总和。我还没有定义如果第二个参数更大,函数会做什么,比如rangeSum 5 3
。在这里什么是明智的行为
这是我到目前为止编写的代码:
rangeSum :: Integer -> Integer -> Integer
rangeSum x y
| x == y = 0
| x > y = error "rangeSum: First number cannot be bigger than the second number"
| otherwise = undefined
我不知道如何用替换
未定义的,而未定义的可以在代码中写入sum[x..y]
当x>y
时,也可以返回sum[y..x]
但是,如果要强调x
不能大于y
,则可以返回类型为Maybe Integer
的值,而只返回Integer
,这样,如果x>y
则可以返回Nothing
,否则只返回$sum[x..y]
因此,您的代码可以如下所示:
rangeSum::Integer->Integer->Maybe Integer
范围和x y
|x>y=无
|否则=仅$sum[x..y]
您还可以使用递归解决此问题:
rangeSum::Integer->Integer->Integer
范围和x y
|x==y=0
|x>y=错误“…”
|否则=x+范围和(x+1)y
。。。或者…:
rangeSum::Integer->Integer->Maybe Integer
范围和x y
|x>y=无
|否则=让
辅助对象x y | x==y=0
辅助对象x y=x+辅助对象(x+1)y in
只要$x y
提示:3+4+5+…+y=3+(4+5+…+y)。参见上面@leftaroundabout的提示。与x>y的情况相同,3+4+5=5+4+3允许您使用smarty裤子答案吗?然后,您还可以使用高斯快捷方式计算第一个和最后一个元素的和,并将该和乘以数字量的一半。这无疑有助于解决问题,但有没有可能使用递归来解决它?