Posted to tcl by aspect at Fri Sep 21 07:48:34 GMT 2012view pretty

proc unknown {var <- args} {
    foreach term $args {
        if {$term in [list & | ( )]} {
            lappend ex $term
        } elseif {$term == "~"} {
            lappend ex !
        } else {
            lappend ex "\${$term}"
        }
    }
    set ex [join $ex " "]
    uplevel 1 "set $var \[expr {$ex}\]"
}

proc 3not2 {a b c} {
proc 3not2 {a b c} {
    111 <- a & b & c
    any <- a | b | c

    # ~a <- ~ a

    a+c <- a | c
    a&c <- a & c

    a*b <- a & b
    a+b <- a | b
    ~a*b <- ~ a*b
    a^b <- a+b & ~a*b
    abodd <- a^b

    b*c <- b & c
    b+c <- b | c
    ~b*c <- ~ b*c
    b^c <- b+c & ~b*c
    bcodd <- b^c

    notall <- ~a*b | ~b*c

    101/010 <- abodd & bcodd
    101 <- 101/010 & a+c
    010 <- ~a*b & ~b*c & b

    two <- ( abodd & c ) | ( bcodd & a ) | 101

    011 <- two & b & c
    110 <- two & a & b

    # these three are false
    000 <- ~a*b & ~b*c
    001 = ~a*b & c
    100 = ~b*c & a

    ~b <-  001 | 100 | 101

    ~a <- 000 | 001 | 010 | 011
    ~c <- 000 | 010 | 100 | 110
    foreach var [info locals] {
        dict set res $var [set $var]
    }
    return $res
}


set cols [list a b c two 000 001 100]
foreach v $cols {
    puts -nonewline $v\t
}
puts ""
foreach a {0 1} {   
    foreach b {0 1} {   
        foreach c {0 1} {
            set d [3not2 $a $b $c]
            foreach v $cols {
                puts -nonewline [expr [dict get $d $v]?1:"."]\t
            }
            puts ""
        }
    }
}