3値論理 論理積 2008/03/29

3値論理(three-valued-logic, 3VL)は、
第三の論理値を持つ論理システムのことだそうです。SQLで使われているそうです。



uはunknownの意味です。

論理積 p ^ qを出力してみました。
命題pと命題qが真の時に、真となって、あとはどちらかかfalseだとfalse

t ^ t = t
t ^ f = f
t ^ u = u
f ^ t = f
f ^ f = f
f ^ u = f
u ^ t = u
u ^ f = f
u ^ u = u


論理積を出力するコードです。
NullPointer例外を使ったロジックでなっています。

public class TestBoolean {

public static void main(String[] args) {
b();
}

static void b() {
Boolean[] bs = { true, false, null };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printLogicalProduct(bs[i], bs[j]);
}
}

}

static void printLogicalProduct(Boolean p, Boolean q) {
try {
System.out.printf("%s ^ %s = %s%n", p?"t":"f", q?"t":"f", (p && q)?"t":"f");
} catch (NullPointerException e) {
System.out.printf("%s ^ %s = %s%n", p == null ? "u" : p?"t":"f",
q == null ? "u" : q?"t":"f", ((p!=null&&!p) || (q!=null&&!q))?"f":"u");
}
}

// nullpointer ocurred!!
static void a() {
Boolean b = null;
if (b) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}

: