예제 #1
0
파일: numbers.py 프로젝트: pb1729/sat
def cnum(c, args):
    """ usage: (cnum, <name>, <number of bits>, <value>)
        defines a constant number
    """
    name, nbits, val = deparen(args[0]), deparen(args[1]), deparen(args[2])
    ans = ['list', *binrep(val, nbits)]
    c.variables[name] = ans
    return ans
예제 #2
0
파일: numbers.py 프로젝트: pb1729/sat
def defnum(c, args):
    """ usage: (defnum, <name>, <number of bits>)
        to access the number: (num <name>)
    """
    name, nbits = deparen(args[0]), deparen(args[1])
    ans = ['list', *[c.junkvar() for i in range(nbits)]]
    c.variables[name] = ans
    return ans
예제 #3
0
def exactly_one(c, args):
    params = [deparen(arg) for arg in args]
    if len(params) == 0:
        return c.F
    if len(params) == 1:
        return params[0]
    else:
        hlf = len(params) // 2
        return [
            '|', ['&', ['e1', *params[:hlf]], ['~', ['|', *params[hlf:]]]],
            ['&', ['e1', *params[hlf:]], ['~', ['|', *params[:hlf]]]]
        ]
예제 #4
0
파일: field_util.py 프로젝트: pb1729/sat
 def mac_at(c, args):
     return at(deparen(args[0]), [deparen(arg) for arg in args[1:]])
예제 #5
0
파일: numbers.py 프로젝트: pb1729/sat
def slice_macro(c, args):
    lst = c.expr_tree(args[0])
    i = deparen(args[1])
    j = deparen(args[2])
    return lst[i + 1:j + 1]
예제 #6
0
파일: numbers.py 프로젝트: pb1729/sat
def index(c, args):
    lst = c.expr_tree(args[0])
    i = deparen(args[1])
    return lst[i + 1]
예제 #7
0
파일: numbers.py 프로젝트: pb1729/sat
def num(c, args):
    return c.variables[deparen(args[0])]