● 概要
Inubuyo Logicの使用例をJythonで。
● 準備
Jythonを起動して、パッケージjp.inubuyo.bone.logicをimportします。
inubuyo@~$ jython
Jython 2.5.2 (Release_2_5_2:7206, Mar 2 2011, 23:12:06)
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_37
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import jp.inubuyo.bone.logic as logic
>>>
この時点で、size()が2以下の全ての写像に対応するB2toBのインスタンスが利用できます。
全16個あります。
>>> logic.BtoBs.FALSE
jp.inubuyo.bone.logic.impl.BtoB_Constant[false]
>>> logic.BtoBs.TRUE
jp.inubuyo.bone.logic.impl.BtoB_Constant[true]
>>> logic.BtoBs.ID
jp.inubuyo.bone.logic.impl.BtoB_Id[]
>>> logic.BtoBs.NOT
jp.inubuyo.bone.logic.impl.BtoB_Not[]
>>>
以上の4個はBtoBのインスタンスです。定値関数の2つはarity()が0、残りの2つはarity()が1です。
B2toBsにも同じインスタンスにアタッチされた定数があります。
>>> logic.B2toBs.FALSE
jp.inubuyo.bone.logic.impl.BtoB_Constant[false]
>>> logic.B2toBs.TRUE
jp.inubuyo.bone.logic.impl.BtoB_Constant[true]
>>> logic.B2toBs.P1
jp.inubuyo.bone.logic.impl.BtoB_Id[]
>>> logic.B2toBs.NOT_P1
jp.inubuyo.bone.logic.impl.BtoB_Not[]
以下の12個はB2toBのインスタンスです。
>>> logic.B2toBs.P2
jp.inubuyo.bone.logic.impl.B2toB_Injection2[jp.inubuyo.bone.logic.impl.BtoB_Id[]]
>>> logic.B2toBs.NOT_P2
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_Injection2[jp.inubuyo.bone.logic.impl.BtoB_Id[]]]
ここまではarity()が1のもので、以降が2項演算です。
2項演算は10個あります。
>>> logic.B2toBs.AND
jp.inubuyo.bone.logic.impl.B2toB_And@16916f80
>>> logic.B2toBs.OR
jp.inubuyo.bone.logic.impl.B2toB_Or@651ee017
>>> logic.B2toBs.XOR
jp.inubuyo.bone.logic.impl.B2toB_Xor@618eabf6
>>> logic.B2toBs.NAND
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_And@16916f80]
>>> logic.B2toBs.NOR
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_Or@651ee017]
>>> logic.B2toBs.NXOR
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_Xor@618eabf6]
>>> >
この6つが可換な2項演算です。
>>> logic.B2toBs.P1_OR_NOT_P2
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_Composite@78c6cbc]
>>> logic.B2toBs.P1_AND_NOT_P2
jp.inubuyo.bone.logic.impl.B2toB_Not[jp.inubuyo.bone.logic.impl.B2toB_Composite@4e84f566]
>>> logic.B2toBs.NOT_P1_AND_P2
jp.inubuyo.bone.logic.impl.B2toB_Composite@78c6cbc
>>> logic.B2toBs.NOT_P1_OR_P2
jp.inubuyo.bone.logic.impl.B2toB_Composite@4e84f566
>>>
この4つが非可換な2項演算です。
● 定値関数
定値関数B2toBs.FALSEのvalueメソッドには、何を与えてもFalseが返ってきます。
>>> f0 = logic.B2toBs.FALSE
>>> f0.value(True)
False
>>> f0.value(False)
False
>>> f0.value(True, False)
False
>>> f0.value([False, False])
False
>>>
これに対して、定値関数B2toBs.TRUEのvalueメソッドには、何を与えてもTrueが返ってきます。
>>> f1 = logic.B2toBs.TRUE
>>> f1.value(True)
True
>>> f1.value(False)
True
>>> f1.value(True, False)
True
>>> f1.value([False, False])
True
>>>
B2toBs.FALSEのbitwiseメソッドには、何を与えても0が返ってきます。
>>> f0.bitwise(5)
0L
>>> f0.bitwise(10L)
0L
Jythonでは、引数の型をintにしてもlong型として扱われています。
B2toBs.TRUEのbitwiseメソッドは、符号付き整数型に対しては-1が返ってきます。
>>> f1.bitwise(5)
-1L
>>> f1.bitwise(10L)
-1L
全ビットを1にするからです。
定値関数はsize()、arity()とも0です。
>>> f0.size()
0
>>> f1.size()
0
>>> f0.arity()
0
>>> f1.arity()
0
IDは、FALSEが0、TRUEが1です。
>>> f0.toID()
0L
>>> f1.toID()
1L
● 単項演算
BtoBs.IDは恒等写像、BtoBs.NOTは否定です。
>>> f2.value(True)
True
>>> f2.value(False)
False
>>> f3 = logic.BtoBs.NOT
>>> f3.value(True)
False
>>> f3.value(False)
True
>>>
BtoBs.IDのnot()は、BtoBs.NOTです。
>>> f2.not() == logic.BtoBs.NOT
True
>>>
>>> f2.toID()
2L
>>> f3.toID()
3L
今日はここまで。
※コメント投稿者のブログIDはブログ作成者のみに通知されます