僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
買った本(さてどこまで読めるか...)に触発された。
pythonで書いてみた。
>>> def nand(a, b): ... if a == b == 1: ... return 0 ... else: ... return 1
まずNOT。
>>> x = 0 >>> nand(x, x) 1 >>> x = 1 >>> nand(x, x) 0
それにAND。
>>> x = y = 1 >>> nand(nand(x,y), nand(x, y)) 1 >>> x = y = 0 >>> nand(nand(x,y), nand(x, y)) 0 >>> x = 1; y = 0 >>> nand(nand(x,y), nand(x, y)) 0 >>> x = 0; y = 1 >>> nand(nand(x,y), nand(x, y)) 0
上のANDにはNANDを3つ使ってるように見えるが、2つでも同じみたい。
>>> def andgate(a, b): ... temp = nand(a, b) ... return nand(temp, temp) >>> andgate(1,1) 1 >>> andgate(1,0) 0 >>> andgate(0,1) 0 >>> andgate(0,0) 0
適当に試して、Equivalence(等価?)ができた。
def notgate(x): return nand(x, x) >>> x = y = 1 >>> andgate(nand(notgate(x), y) ,nand(x, notgate(y))) 1 >>> x = y = 0 >>> andgate(nand(notgate(x), y) ,nand(x, notgate(y))) 1 >>> x = 0; y = 1 >>> andgate(nand(notgate(x), y) ,nand(x, notgate(y))) 0 >>> x = 1; y = 0 >>> andgate(nand(notgate(x), y) ,nand(x, notgate(y))) 0
論理和はどうしようか。検索結果のひきうつしはやめておきたい。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。