犬ぶよツールズ制作記録

Javaによる研究生活のためのパッケージ、犬ぶよツールズ。
その開発と保守のための備忘録

Inubuyo Logic (BntoB) Libraryの使用例

2012-12-19 00:53:05 | Weblog

● 概要

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 = logic.BtoBs.ID 

>>> 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
>>>

同一のインスタンスです。
 
 
BtoBs.IDは3番、BtoBs.NOTは4番です。

>>> f2.toID()
2L

>>> f3.toID()
3L

 

今日はここまで。

 

 


最新の画像もっと見る

コメントを投稿