有人可以帮我理解 Haskell 中的这个递归吗?
Can someone help me understand this recursion in Haskell?
代码如下:
func [] _ = 0
func (head:tail) num
| head > num = func tail num
| head <= num = head + (func tail num)
main = print(func [4,1,2,5,7,6] 2 * 3)
这是我的解决方案:
4 + func[1,2,5,7,6] 6
-> 1 + func[2,5,7,6] 6
-> 2 + func[5,7,6] 6
-> 5 + func[7,6] 6
-> func[6] 6
-> 6 + func[] 6
---> 4 + 1 + 2 + 5 + 6 = 18
但是我查了一下网上的编译解是9,我哪里弄错了我没看懂。这是非常简单的代码。
为print
提供参数的表达式应理解为
(func [4, 1, 2, 5, 7, 6] 2) * 3
没有
func [4, 1, 2, 5, 7, 6] (2 * 3)
因为函数应用程序优先于任何中缀运算符。
代码如下:
func [] _ = 0
func (head:tail) num
| head > num = func tail num
| head <= num = head + (func tail num)
main = print(func [4,1,2,5,7,6] 2 * 3)
这是我的解决方案:
4 + func[1,2,5,7,6] 6
-> 1 + func[2,5,7,6] 6
-> 2 + func[5,7,6] 6
-> 5 + func[7,6] 6
-> func[6] 6
-> 6 + func[] 6
---> 4 + 1 + 2 + 5 + 6 = 18
但是我查了一下网上的编译解是9,我哪里弄错了我没看懂。这是非常简单的代码。
为print
提供参数的表达式应理解为
(func [4, 1, 2, 5, 7, 6] 2) * 3
没有
func [4, 1, 2, 5, 7, 6] (2 * 3)
因为函数应用程序优先于任何中缀运算符。