Added preliminary support for unary operations
This commit is contained in:
parent
2af5fe5e14
commit
f05375398c
|
@ -17,6 +17,9 @@ operations = {
|
||||||
"&": lambda x, y: x & y,
|
"&": lambda x, y: x & y,
|
||||||
"|": lambda x, y: x | y
|
"|": lambda x, y: x | y
|
||||||
}
|
}
|
||||||
|
unary_operations = {
|
||||||
|
"~": lambda s, x, y: ~(s(x, y)) if type(x) == type(0) and type(y) == type(0) else "~" + str(s(x, y))
|
||||||
|
}
|
||||||
|
|
||||||
# gensym has a 1/3 chance of returning a lambda that returns x, 1/3 for y, and 1/3 for a number generated *when gensym was run*.
|
# gensym has a 1/3 chance of returning a lambda that returns x, 1/3 for y, and 1/3 for a number generated *when gensym was run*.
|
||||||
def gensym():
|
def gensym():
|
||||||
|
@ -113,6 +116,10 @@ def generate(arg = "default", ops = False, syms = False):
|
||||||
ops = [random.choice([x for x, y in operations.items()]) for k in range(random.randint(2, 6))]
|
ops = [random.choice([x for x, y in operations.items()]) for k in range(random.randint(2, 6))]
|
||||||
if not syms:
|
if not syms:
|
||||||
syms = [gensym() for i in range(len(ops) + 1)]
|
syms = [gensym() for i in range(len(ops) + 1)]
|
||||||
|
# for i in range(len(syms)):
|
||||||
|
# if random.randint(0, 4) == 0:
|
||||||
|
# sym = syms[i] # do not try and inline this
|
||||||
|
# syms[i] = lambda x, y: unary_operations[random.choice(x for x, y in unary_operations.items())](sym, x, y)
|
||||||
|
|
||||||
literals = [f("x", "y") for f in syms]
|
literals = [f("x", "y") for f in syms]
|
||||||
if "y" not in literals or "x" not in literals:
|
if "y" not in literals or "x" not in literals:
|
||||||
|
|
Loading…
Reference in New Issue