J语言100门问题代码中动词串(100 $ - {. 1:)里1:的含义及分组规则咨询
关于1:的含义
1:是J语言中的常量动词,属于「数字+冒号」的固定语法结构,不要和单独的:动词混淆。这类动词的作用是:无论接收的输入参数是什么,永远返回冒号前的数字值。同系列的用法还有0:(永远返回0)、_3:(永远返回-3)等。
关于J语言动词串的分组规则
J语言没有传统编程语言的运算符优先级差异,所有动词(对应其他语言的函数/运算符)优先级完全相同,核心解析规则是右优先结合,计算时永远从最右侧的操作开始向左执行。
我们以你提到的(100 $ - {. 1:)动词串为例,拆分它的分组和执行逻辑(它会作为一元动词,接收1~100的每个整数n作为输入):
- 先明确各部分词性:
100是名词,$、-、{.是内置动词,1:是常量动词 - 右到左的分组结果:
100 $ ( - ( {. ( 1: ) ) ) - 单个输入n的执行流程:
- 最右侧的
1:接收输入n,返回固定值1 {.}(取首元素动词)接收返回的1,标量的首元素就是自身,返回1-接收返回的1,返回-1$(重塑动词)以左参数100为长度、右参数-1为填充值,返回长度为100、所有元素为-1的列表
后续配合其他语法逻辑,就可以实现将每个列表的第n位设为1的效果,最终通过按列异或得到平方数结果。
- 最右侧的
内容的提问来源于stack exchange,提问作者honestSalami
相关产品推荐
相关产品推荐

