我想知道为什么以下方法不起作用。
(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))7
1
和
(({&('no';'yes'))@(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)))7
┌──┐
│no│
└──┘
我希望它返回yes
,因为它采用第二个参数(因为第一个表达式的计算结果为1
)。有人可以解释一下吗?
谢谢。
我想知道为什么以下方法不起作用。
(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))7
1
和
(({&('no';'yes'))@(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)))7
┌──┐
│no│
└──┘
我希望它返回yes
,因为它采用第二个参数(因为第一个表达式的计算结果为1
)。有人可以解释一下吗?
谢谢。
我必须承认很难弄清楚你想要做什么,但我认为问题是你使用自我参考($ :)。
J 词典中对自指的描述说“$: 表示包含它的最长动词”。 http://www.jsoftware.com/help/dictionary/d212.htm
通过
({&('no';'yes'))
与您的原始动词
结合
(1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4))
您实际上已经更改了 $: self 引用的动词,我相信这会导致(意外)行为。我希望这个对你有用。如果你能给出使用 $: 的理由,我可能会更好地回答你的动词为什么会这样工作。我倾向于很少使用它,因为 J 中通常有更好的解决方案。
只是另一个想法。您可以单独定义要创建的动词部分,这将限制 $: 的范围并为您提供所需的行为。
选择=: (1=$:@([:+/[:*:@"."0":)`]@.(e.&1 4)) 显示=:({&('否';'是')) 显示@选择7 ┌────┐ │是的│ └────┘</pre>