私は 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 を定義したいと思います。
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 配列を生成したことだと思いました。そのため、モナド部分を nand ( *:y
) を使用するように変更しました。これは、2 x 2 配列を生成するためです。
*:/~ 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
誰かが私の思考の欠陥を理解するのを手伝ってくれますか?