我與以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