J语言中Insert(fold)为何为右结合?如何实现左结合?
J语言
-/结合性问题解答 问题重现
预期执行代码:
-/ 1 2 3 4 _8 NB. ((1-2)-3)-4
实际运行结果:
-/ 1 2 3 4 _2 NB. 1-(2-(3-4))
设计原因
J语言默认给二元运算符设定了右结合性,减法也不例外。这一设计是为了保持运算符语法的一致性——绝大多数二元运算符都遵循右结合规则,同时契合J的数组与函数式编程特性,让序列运算的逻辑更统一。
实现左结合减法
要得到你预期的左结合运算结果,有两种常用方法:
- 使用左插入运算符
-/::-/: 1 2 3 4 _8 NB. ((1-2)-3)-4 - 显式添加括号强制分组(适合元素数量较少的场景):
((1-2)-3)-4 _8
手册对应内容
官方手册中,**插入运算符(Insert)和运算符优先级与结合性(Operator Precedence and Associativity)**章节对该问题有详细说明,可在官方学习手册中查阅这些部分。
内容的提问来源于stack exchange,提问作者Tom Huntington
相关产品推荐
相关产品推荐

