我正在尝试在 J 中生成真值表:
nand =: *:
nand /~ 0 1
1 1
1 0
bxor =: 22 b. NB. Built-in bitwise XOR
bxor /~ 0 1
0 1
1 0
现在我想定义我自己的逻辑异或,我这样做了:
xor =: 3 : 0
]y NB. monadic case is just the identity
:
(x*.-.y)+.(y*.-.x) NB. dyadic case is (x AND NOT y) OR (y AND NOT x)
)
当我直接调用它时,这正如我所期望的那样工作。
0 xor 0 1
0 1
1 xor 0 1
1 0
但它不会生成真值表:
xor /~ 0 1
0 0
为什么不?
我想也许问题是它]/~ 0 1
本身产生了一个 1 x 2 数组,所以我将 monadic 部分更改为使用 nand ( *:y
) 因为它产生 2x2 数组:
*:/~ 0 1
1 1
1 0
xor =: 3 : 0
*:y NB. certainly wrong, but at least has 2x2 shape.
:
(x*.-.y)+.(y*.-.x)
)
但我仍然得到相同的行为:
xor /~ 0 1
0 0
有人可以帮助我理解我的思维缺陷吗?