Glomp script, first run!
This commit is contained in:
parent
679274de2f
commit
4a209f1934
@ -134,6 +134,7 @@
|
|||||||
<span class="achievement normal">Beat the Elite Four</span>
|
<span class="achievement normal">Beat the Elite Four</span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li>Crimson Skies</li>
|
||||||
<li>Prince of Persia (1989)</li>
|
<li>Prince of Persia (1989)</li>
|
||||||
<li>Prince of Persia: Sands of Time</li>
|
<li>Prince of Persia: Sands of Time</li>
|
||||||
<li>Prince of Persia (2008)</li>
|
<li>Prince of Persia (2008)</li>
|
||||||
|
69
static/glomper.py
Normal file
69
static/glomper.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
class Glomp():
|
||||||
|
@classmethod
|
||||||
|
def metaize(self, op=None, *arguments):
|
||||||
|
if op is None:
|
||||||
|
raise TypeError
|
||||||
|
fixed_arguments = [g(quantity) for quantity in arguments]
|
||||||
|
return MetaGlomp(op, *fixed_arguments)
|
||||||
|
def __add__(self, other): return Glomp.metaize("__add__", self, other)
|
||||||
|
def __sub__(self, other): return Glomp.metaize("__sub__", self, other)
|
||||||
|
def __mul__(self, other): return Glomp.metaize("__mul__", self, other)
|
||||||
|
def __div__(self, other): return Glomp.metaize("__div__", self, other)
|
||||||
|
def __floordiv__(self, other): return Glomp.metaize("__floordiv__", self, other)
|
||||||
|
def __mod__(self, other): return Glomp.metaize("__mod__", self, other)
|
||||||
|
def __divmod__(self, other): return Glomp.metaize("__divmod__", self, other)
|
||||||
|
def __pow__(self, other): return Glomp.metaize("__pow__", self, other)
|
||||||
|
def __lshift__(self, other): return Glomp.metaize("__lshift__", self, other)
|
||||||
|
def __rshift__(self, other): return Glomp.metaize("__rshift__", self, other)
|
||||||
|
def __and__(self, other): return Glomp.metaize("__and__", self, other)
|
||||||
|
def __xor__(self, other): return Glomp.metaize("__xor__", self, other)
|
||||||
|
def __or__(self, other): return Glomp.metaize("__or__", self, other)
|
||||||
|
|
||||||
|
def v(g):
|
||||||
|
"""Get the value of a glomp or variable."""
|
||||||
|
if isinstance(g, Glomp):
|
||||||
|
return g.value
|
||||||
|
else:
|
||||||
|
return g
|
||||||
|
|
||||||
|
def g(v):
|
||||||
|
"""Get a glomp of a variable. If the argument is already a glomp, this returns it."""
|
||||||
|
if isinstance(v, Glomp):
|
||||||
|
return v
|
||||||
|
else:
|
||||||
|
return BasicGlomp(v)
|
||||||
|
|
||||||
|
class BasicGlomp(Glomp):
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
def __str__(self):
|
||||||
|
return "g(" + str(self.value) + ")"
|
||||||
|
|
||||||
|
class MetaGlomp(Glomp):
|
||||||
|
def __init__(self, operation_name=None, *arguments):
|
||||||
|
self.targets = arguments
|
||||||
|
self.operation_name = operation_name
|
||||||
|
@property
|
||||||
|
def value(self):
|
||||||
|
return getattr(v(self.targets[0]), self.operation_name)(*[v(i) for i in self.targets[1:]])
|
||||||
|
@value.setter
|
||||||
|
def value(self, new_metaglomp):
|
||||||
|
self.operation_name = new_metaglomp.operation_name
|
||||||
|
self.targets = new_metaglomp.targets
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.operation_name) + ":[" + ",".join(map(str,self.targets)) + "]"
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
foo, bar, baz = g(1), g(2), g(3)
|
||||||
|
print("foo, bar, and baz are set as glomps of 1, 2, and 3.")
|
||||||
|
boop = foo + bar*baz
|
||||||
|
print("boop is set to foo + bar*baz: %s" % (boop, ))
|
||||||
|
print("And we can fetch the value of that computation easily as boop.value: %s" % (boop.value, ))
|
||||||
|
print
|
||||||
|
print("We can change the value of foo:")
|
||||||
|
print(">>> foo.value = 5")
|
||||||
|
foo.value = 5
|
||||||
|
print("And now, when we fetch the value of boop, it is adjusted accordingly:")
|
||||||
|
print(">>> boop.value => %s" % (boop.value,))
|
||||||
|
print
|
||||||
|
print("There is also a shorthand for evaluating a glomp: v(boop) => %s" % (v(boop), ))
|
Loading…
Reference in New Issue
Block a user