Minor cleanup.

This commit is contained in:
Simon Forman 2018-06-27 19:03:23 -07:00
parent 9ee50a6268
commit fc45727008
6 changed files with 119 additions and 81 deletions

View File

@ -499,6 +499,8 @@
" s[u] = v\n", " s[u] = v\n",
" elif isinstance(v, int):\n", " elif isinstance(v, int):\n",
" s[v] = u\n", " s[v] = u\n",
" else:\n",
" s = False\n",
"\n", "\n",
" return s" " return s"
] ]
@ -884,6 +886,8 @@
" s = unify(a, c, s)\n", " s = unify(a, c, s)\n",
" if s != False:\n", " if s != False:\n",
" s = unify(b, d, s)\n", " s = unify(b, d, s)\n",
" else:\n",
" s = False\n",
"\n", "\n",
" return s" " return s"
] ]

Binary file not shown.

View File

@ -94,7 +94,6 @@ definitions = ('''\
of == swap at of == swap at
product == 1 swap [*] step product == 1 swap [*] step
flatten == [] swap [concat] step flatten == [] swap [concat] step
unit == [] cons
quoted == [unit] dip quoted == [unit] dip
unquoted == [i] dip unquoted == [i] dip
enstacken == stack [clear] dip enstacken == stack [clear] dip
@ -120,13 +119,14 @@ range_to_zero == unit [down_to_zero] infra
anamorphism == [pop []] swap [dip swons] genrec anamorphism == [pop []] swap [dip swons] genrec
range == [0 <=] [1 - dup] anamorphism range == [0 <=] [1 - dup] anamorphism
while == swap [nullary] cons dup dipd concat loop while == swap [nullary] cons dup dipd concat loop
dudipd == dup dipd dupdipd == dup dipd
primrec == [i] genrec primrec == [i] genrec
step_zero == 0 roll> step step_zero == 0 roll> step
codireco == cons dip rest cons codireco == cons dip rest cons
make_generator == [codireco] ccons make_generator == [codireco] ccons
ccons == cons cons
''' '''
##ccons == cons cons
##unit == [] cons
##second == rest first ##second == rest first
##third == rest rest first ##third == rest rest first
##swons == swap cons ##swons == swap cons
@ -572,12 +572,12 @@ def clear(stack):
## return second, (tos, stack) ## return second, (tos, stack)
@inscribe ##@inscribe
@SimpleFunctionWrapper ##@SimpleFunctionWrapper
def swaack(stack): ##def swaack(stack):
'''swap stack''' ## '''swap stack'''
old_stack, stack = stack ## old_stack, stack = stack
return stack, old_stack ## return stack, old_stack
##@inscribe ##@inscribe

View File

@ -5,55 +5,55 @@ def _Tree_add_Ee(stack):
""" """
:: ::
([a3 a4 ...0] a2 a1 a0 -- [a1 a2 ...0]) ([a4 a5 ...1] a3 a2 a1 -- [a2 a3 ...1])
""" """
(a0, (a1, (a2, ((a3, (a4, s0)), s1)))) = stack (a1, (a2, (a3, ((a4, (a5, s1)), s2)))) = stack
return ((a1, (a2, s0)), s1) return ((a2, (a3, s1)), s2)
def _Tree_delete_R0(stack): def _Tree_delete_R0(stack):
""" """
:: ::
([a1 ...0] a0 -- [a1 ...0] a1 a0 a0) ([a2 ...1] a1 -- [a2 ...1] a2 a1 a1)
""" """
(a0, ((a1, s0), s1)) = stack (a1, ((a2, s1), s2)) = stack
return (a0, (a0, (a1, ((a1, s0), s1)))) return (a1, (a1, (a2, ((a2, s1), s2))))
def _Tree_delete_clear_stuff(stack): def _Tree_delete_clear_stuff(stack):
""" """
:: ::
(a2 a1 [a0 ...0] -- [...0]) (a3 a2 [a1 ...1] -- [...1])
""" """
((a0, s0), (a1, (a2, s1))) = stack ((a1, s1), (a2, (a3, s2))) = stack
return (s0, s1) return (s1, s2)
def _Tree_get_E(stack): def _Tree_get_E(stack):
""" """
:: ::
([a2 a3 ...0] a1 a0 -- a3) ([a3 a4 ...1] a2 a1 -- a4)
""" """
(a0, (a1, ((a2, (a3, s0)), s1))) = stack (a1, (a2, ((a3, (a4, s1)), s2))) = stack
return (a3, s1) return (a4, s2)
def ccons(stack): def ccons(stack):
""" """
:: ::
(a1 a0 [...0] -- [a1 a0 ...0]) (a2 a1 [...1] -- [a2 a1 ...1])
""" """
(s0, (a0, (a1, s1))) = stack (s1, (a1, (a2, s2))) = stack
return ((a1, (a0, s0)), s1) return ((a2, (a1, s1)), s2)
def cons(stack): def cons(stack):
@ -115,22 +115,22 @@ def first_two(stack):
""" """
:: ::
([a0 a1 ...0] -- a0 a1) ([a1 a2 ...1] -- a1 a2)
""" """
((a0, (a1, s0)), s1) = stack ((a1, (a2, s1)), s2) = stack
return (a1, (a0, s1)) return (a2, (a1, s2))
def fourth(stack): def fourth(stack):
""" """
:: ::
([a0 a1 a2 a3 ...0] -- a3) ([a1 a2 a3 a4 ...1] -- a4)
""" """
((a0, (a1, (a2, (a3, s0)))), s1) = stack ((a1, (a2, (a3, (a4, s1)))), s2) = stack
return (a3, s1) return (a4, s2)
def over(stack): def over(stack):
@ -247,22 +247,22 @@ def rrest(stack):
""" """
:: ::
([a0 a1 ...0] -- [...0]) ([a1 a2 ...1] -- [...1])
""" """
((a0, (a1, s0)), s1) = stack ((a1, (a2, s1)), s2) = stack
return (s0, s1) return (s1, s2)
def second(stack): def second(stack):
""" """
:: ::
([a0 a1 ...0] -- a1) ([a1 a2 ...1] -- a2)
""" """
((a0, (a1, s0)), s1) = stack ((a1, (a2, s1)), s2) = stack
return (a1, s1) return (a2, s2)
def stack(stack): def stack(stack):
@ -280,22 +280,33 @@ def stuncons(stack):
""" """
:: ::
(... a0 -- ... a0 a0 [...]) (... a1 -- ... a1 a1 [...])
""" """
(a0, s0) = stack (a1, s1) = stack
return (s0, (a0, (a0, s0))) return (s1, (a1, (a1, s1)))
def stununcons(stack): def stununcons(stack):
""" """
:: ::
(... a1 a0 -- ... a1 a0 a0 a1 [...]) (... a2 a1 -- ... a2 a1 a1 a2 [...])
""" """
(a0, (a1, s0)) = stack (a1, (a2, s1)) = stack
return (s0, (a1, (a0, (a0, (a1, s0))))) return (s1, (a2, (a1, (a1, (a2, s1)))))
def swaack(stack):
"""
::
([...1] -- [...0])
"""
(s1, s0) = stack
return (s0, s1)
def swap(stack): def swap(stack):
@ -313,22 +324,22 @@ def swons(stack):
""" """
:: ::
([...0] a0 -- [a0 ...0]) ([...1] a1 -- [a1 ...1])
""" """
(a0, (s0, s1)) = stack (a1, (s1, s2)) = stack
return ((a0, s0), s1) return ((a1, s1), s2)
def third(stack): def third(stack):
""" """
:: ::
([a0 a1 a2 ...0] -- a2) ([a1 a2 a3 ...1] -- a3)
""" """
((a0, (a1, (a2, s0))), s1) = stack ((a1, (a2, (a3, s1))), s2) = stack
return (a2, s1) return (a3, s2)
def tuck(stack): def tuck(stack):
@ -353,13 +364,24 @@ def uncons(stack):
return (s0, (a1, s23)) return (s0, (a1, s23))
def unit(stack):
"""
::
(a1 -- [a1 ])
"""
(a1, s23) = stack
return ((a1, ()), s23)
def unswons(stack): def unswons(stack):
""" """
:: ::
([a0 ...0] -- [...0] a0) ([a1 ...1] -- [...1] a1)
""" """
((a0, s0), s1) = stack ((a1, s1), s2) = stack
return (a0, (s0, s1)) return (a1, (s1, s2))

View File

@ -256,8 +256,6 @@ def infer(e, F=ID):
a0, a1, a2, a3, a4, a5, a6, a7, a8, a9 = A a0, a1, a2, a3, a4, a5, a6, a7, a8, a9 = A
n0, n1, n2, n3, n4, n5, n6, n7, n8, n9 = N n0, n1, n2, n3, n4, n5, n6, n7, n8, n9 = N
s0, s1, s2, s3, s4, s5, s6, s7, s8, s9 = S s0, s1, s2, s3, s4, s5, s6, s7, s8, s9 = S
f0, f1, f2, f3, f4, f5, f6, f7, f8, f9 = F = map(FloatJoyType, _R)
i0, i1, i2, i3, i4, i5, i6, i7, i8, i9 = I = map(IntJoyType, _R)
_R = range(1, 11) _R = range(1, 11)
As = map(AnyStarJoyType, _R) As = map(AnyStarJoyType, _R)

View File

@ -30,6 +30,7 @@ class AnyJoyType(object):
return hash(repr(self)) return hash(repr(self))
class BooleanJoyType(AnyJoyType): prefix = 'b'
class NumberJoyType(AnyJoyType): prefix = 'n' class NumberJoyType(AnyJoyType): prefix = 'n'
class FloatJoyType(NumberJoyType): prefix = 'f' class FloatJoyType(NumberJoyType): prefix = 'f'
class IntJoyType(FloatJoyType): prefix = 'i' class IntJoyType(FloatJoyType): prefix = 'i'
@ -41,12 +42,6 @@ class StackJoyType(AnyJoyType):
return False return False
_R = range(10)
A = a0, a1, a2, a3, a4, a5, a6, a7, a8, a9 = map(AnyJoyType, _R)
N = n0, n1, n2, n3, n4, n5, n6, n7, n8, n9 = map(NumberJoyType, _R)
S = s0, s1, s2, s3, s4, s5, s6, s7, s8, s9 = map(StackJoyType, _R)
class JoyTypeError(Exception): pass class JoyTypeError(Exception): pass
@ -212,7 +207,7 @@ def _to_str(term, stack, switch):
end = '' if term == () else '...' end = '' if term == () else '...'
#end = '...' #end = '...'
else: else:
end = '...%i' % term.number end = '' if term == () else '...%i' % term.number
a.append(end) a.append(end)
return '[%s]' % ' '.join(a) return '[%s]' % ' '.join(a)
@ -238,43 +233,62 @@ def __(*seq):
return stack return stack
_R = range(10)
A = a0, a1, a2, a3, a4, a5, a6, a7, a8, a9 = map(AnyJoyType, _R)
B = b0, b1, b2, b3, b4, b5, b6, b7, b8, b9 = map(BooleanJoyType, _R)
N = n0, n1, n2, n3, n4, n5, n6, n7, n8, n9 = map(NumberJoyType, _R)
S = s0, s1, s2, s3, s4, s5, s6, s7, s8, s9 = map(StackJoyType, _R)
F = f0, f1, f2, f3, f4, f5, f6, f7, f8, f9 = F = map(FloatJoyType, _R)
I = i0, i1, i2, i3, i4, i5, i6, i7, i8, i9 = I = map(IntJoyType, _R)
def defs(): def defs():
rolldown = __(a1, a2, a3), __(a2, a3, a1)
rollup = __(a1, a2, a3), __(a3, a1, a2)
pop = __(a1), __()
popop = __(a2, a1,), __()
popd = __(a2, a1,), __(a1)
popdd = __(a3, a2, a1,), __(a2, a1,)
popopd = __(a3, a2, a1,), __(a1)
popopdd = __(a4, a3, a2, a1,), __(a2, a1)
swap = __(a1, a2), __(a2, a1)
rest = __((a1, s0),), __(s0,)
rrest = C(rest, rest)
cons = __(a1, s0), __((a1, s0),) cons = __(a1, s0), __((a1, s0),)
ccons = C(cons, cons) ccons = C(cons, cons)
uncons = __((a1, s0),), __(a1, s0)
unswons = C(uncons, swap)
swons = C(swap, cons)
dup = __(a1,), __(a1, a1) dup = __(a1,), __(a1, a1)
dupd = __(a2, a1), __(a2, a2, a1) dupd = __(a2, a1), __(a2, a2, a1)
dupdd = __(a3, a2, a1), __(a3, a3, a2, a1) dupdd = __(a3, a2, a1), __(a3, a3, a2, a1)
first = __((a1, s1),), __(a1,) first = __((a1, s1),), __(a1,)
second = C(rest, first)
third = C(rest, second)
fourth = C(rest, third)
tuck = __(a2, a1), __(a1, a2, a1)
over = __(a2, a1), __(a2, a1, a2) over = __(a2, a1), __(a2, a1, a2)
pop = __(a1), __()
popd = __(a2, a1,), __(a1)
popdd = __(a3, a2, a1,), __(a2, a1,)
popop = __(a2, a1,), __()
popopd = __(a3, a2, a1,), __(a1)
popopdd = __(a4, a3, a2, a1,), __(a2, a1)
rest = __((a1, s0),), __(s0,)
rolldown = __(a1, a2, a3), __(a2, a3, a1)
rollup = __(a1, a2, a3), __(a3, a1, a2)
rrest = C(rest, rest)
second = C(rest, first)
stack = s0, (s0, s0) stack = s0, (s0, s0)
swaack = (s1, s0), (s0, s1) swaack = (s1, s0), (s0, s1)
swap = __(a1, a2), __(a2, a1)
swons = C(swap, cons)
third = C(rest, second)
tuck = __(a2, a1), __(a1, a2, a1)
uncons = __((a1, s0),), __(a1, s0)
unswons = C(uncons, swap)
stuncons = C(stack, uncons) stuncons = C(stack, uncons)
stununcons = C(stack, uncons, uncons) stununcons = C(stack, uncons, uncons)
first_two = C(uncons, uncons, pop) unit = __(a1), __((a1, ()))
mul = __(n1, n2), __(n3,) eq = ge = gt = le = lt = ne = __(n1, n2), __(b1)
and_ = __(b1, b2), __(b3)
bool_ = not_ = __(a1), __(b1)
add = div = floordiv = modulus = mul = pow_ = sub = truediv = \
lshift = rshift = __(n1, n2), __(n3,)
sqrt = C(dup, mul) sqrt = C(dup, mul)
succ = pred = __(n1,), __(n2,) succ = pred = neg = __(n1,), __(n2,)
divmod_ = pm = __(n2, n1), __(n4, n3) divmod_ = pm = __(n2, n1), __(n4, n3)
first_two = C(uncons, uncons, pop)
fourth = C(rest, third)
_Tree_add_Ee = C(pop, swap, rolldown, rrest, ccons) _Tree_add_Ee = C(pop, swap, rolldown, rrest, ccons)
_Tree_get_E = C(popop, second) _Tree_get_E = C(popop, second)
_Tree_delete_clear_stuff = C(rollup, popop, rest) _Tree_delete_clear_stuff = C(rollup, popop, rest)