!論理演算や集合演算の式を計算して、その結果を真理値表やベン図で表す
!●論理演算 !<式>::=<項> { + <項> }* !<項>::=<因子> { * <因子> }* !<因子>::={ <数> | ( <式> ) } { ' }* !<数>::={ <変数> | <整数> } !<変数>::={ A | B | C | D | … | X | Y | Z } ※小文字は大文字として扱う !<整数>::=<数字> ※0,1
!●集合演算、命題 !<命題>::=<式> { { ⇒ | ⇔ } <式> }* !<式>::=<項> { { ∪ | - } <項> }* ※∨,|も可能 !<項>::=<因子> { ∩ <因子> }* //∧,&も可能 !<因子>::={ ¬ }* { <数> | ( <命題> ) } ※〜,!も可能 !<数>::={ <関数> | <変数> } !<関数>::={ ! φ | //空集合 ! Ω //普遍集合 ! } !<変数>::={ A | B | C | D | … | X | Y | Z } ※小文字は大文字として扱う
LET N=3 !変数の数
DIM vTBL(26) !変数A〜Z ※真理値表ビットパターン(2^N 桁) LET vTBL(1)=BVAL("00001111",2) !A LET vTBL(2)=BVAL("00110011",2) !B LET vTBL(3)=BVAL("01010101",2) !C LET vTBL(21)=BVAL("11111111",2) !U=Ω
DIM cTBL(0 TO 1) !定数 LET cTBL(0)=BVAL("00000000",2) !0,φ LET cTBL(1)=BVAL("11111111",2) !1,Ω
DIM stack_Eval(50) !式の計算用のスタック LET sp_Eval=0 !スタックポインタ
!ビット単位の論理演算 DEF AND(x,y)=MIN(x,y) !論理積 DEF OR(x,y)=MAX(x,y) !論理和 DEF NT(x)=1-x !否定 ※2値論理
!ビット演算 FUNCTION BitAND(v1,v2) !ビットAND f=v1&v2 LET vv=0 FOR i=2^N-1 TO 0 STEP -1 LET vv=vv*2+AND(Bit(v1,i),Bit(v2,i)) NEXT i LET BitAND=vv END FUNCTION FUNCTION BitOR(v1,v2) !ビットOR f=v1|v2 LET vv=0 FOR i=2^N-1 TO 0 STEP -1 LET vv=vv*2+OR(Bit(v1,i),Bit(v2,i)) NEXT i LET BitOR=vv END FUNCTION FUNCTION BitNOT(v) !ビット反転 f=!v LET vv=0 FOR i=2^N-1 TO 0 STEP -1 LET vv=vv*2+NT(Bit(v,i)) NEXT i LET BitNOT=vv END FUNCTION
|