【发布时间】:2017-09-30 08:21:25
【问题描述】:
我被variable not in scope: m 错误困住了。
这应该是一个以尾递归方式对 n 个数字求和的代码。
zum :: Integer-> Integer
zum n = add_sum m n where
add_sum :: Integer-> Integer-> Integer
add_sum m n
| n == 0 = m
| otherwise = add_sum (m+n) (n-1)
【问题讨论】:
-
在您的
zum n = add_sum m n行中,您在哪里定义m? -
啊,是的!谢谢!就是那条线。我发现了问题!应该是:zum n = add_sum 0 n where
-
好。您可以添加答案(允许)并接受它,以标记问题已解决。
-
完成!再次感谢。
-
顺便说一句,我不确定这是尾递归。编译器可能足够聪明,可以识别它,但使用守卫是大型 if/else 表达式的语法糖。如果我错了,有人可以纠正我,但我认为你的功能将扩展到
if n == 0 then m else if (n - 1) == 0 then m+1 else if ...。更多信息here。您希望以与参数匹配的方式定义add_sum,而不是使用守卫。
标签: haskell recursion scope tail-recursion