我与以J产生真值表试验:真值表与/〜为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×2的数组,所以我改变了单子部分使用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
有人能帮助我理解我思想中的缺陷吗?
**更新**我发现'〜 :',它实现了逻辑XOR,'〜:/〜0 1'正确地构建了真值表......但是我仍然不明白为什么我的手写代码不能很好地处理'/〜'。 – tangentstorm 2012-07-05 10:14:29