关于funkcija函数计算结果与参数求值顺序的技术问询
Haskell函数执行逻辑与结果解析
首先看你的Haskell代码:
funkcija[] _ = 0 funkcija (glava:rep) broj | glava > broj = funkcija rep broj | glava <= broj = glava + (funkcija rep broj) funkcija [4,2,1,5,7,6] 2*3
核心优先级问题
Haskell中函数调用的优先级高于任何运算符,所以funkcija [4,2,1,5,7,6] 2*3会被解析为(funkcija [4,2,1,5,7,6] 2) * 3——也就是先让列表元素和2比较求和,再把得到的总和乘3,而非先计算2*3=6再做比较。
具体计算过程
- 先执行
funkcija [4,2,1,5,7,6] 2:- 4>2,跳过,递归处理剩余列表
[2,1,5,7,6] - 2<=2,累加2,递归处理剩余列表
[1,5,7,6] - 1<=2,累加1,递归处理剩余列表
[5,7,6] - 5>2、7>2、6>2,全部跳过,递归到空列表返回0
- 这一步的总和是2+1=3
- 4>2,跳过,递归处理剩余列表
- 再将结果乘3:3*3=9
结论
正确结果是9,执行逻辑是先与2比较求和,再将总和乘3。
内容的提问来源于stack exchange,提问作者Mihailo
相关产品推荐
相关产品推荐

