J语言tacit编程添加平方根到函数组合后结果异常求助
问题原因
你遇到的是J语言中副词优先级高于连词的语法规则导致的解析错误。
J中副词(比如求和用到的/)优先级远高于连词(比如组合函数用的@:),当你直接写%:@:+/@:*:@:-时,J不会把+/解析为整体的求和动词,而是会先把%:@:+识别为复合动词,再让/作用在这个复合动词上,最终等价于((%:@:+)/)@:*:@:-。这时候的/不再是求和,而是“将左边的复合动词插入到左右参数拼接后的所有元素之间执行”,和你预期的逻辑完全不符,所以得到了错误的结果。
你之前写的长递增组合能正常运行,是因为组合里只有动词和连词,没有副词参与,不存在优先级冲突。你尝试更换&/&:/@都没有效果,是因为问题根源不是连词类型选择错误,而是优先级导致的函数解析错误。
解决方法
只需要给+/加括号明确它是一个整体即可,正确的tacit写法如下:
1 2 3 4 5 (%:@:(+/)@:*:@:-) 2 2 2 2 2 3.87298
内容的提问来源于stack exchange,提问作者jc52766
相关产品推荐
相关产品推荐

