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

Binary file not shown.

View File

@ -94,7 +94,6 @@ definitions = ('''\
of == swap at
product == 1 swap [*] step
flatten == [] swap [concat] step
unit == [] cons
quoted == [unit] dip
unquoted == [i] dip
enstacken == stack [clear] dip
@ -120,13 +119,14 @@ range_to_zero == unit [down_to_zero] infra
anamorphism == [pop []] swap [dip swons] genrec
range == [0 <=] [1 - dup] anamorphism
while == swap [nullary] cons dup dipd concat loop
dudipd == dup dipd
dupdipd == dup dipd
primrec == [i] genrec
step_zero == 0 roll> step
codireco == cons dip rest cons
make_generator == [codireco] ccons
ccons == cons cons
'''
##ccons == cons cons
##unit == [] cons
##second == rest first
##third == rest rest first
##swons == swap cons
@ -572,12 +572,12 @@ def clear(stack):
## return second, (tos, stack)
@inscribe
@SimpleFunctionWrapper
def swaack(stack):
'''swap stack'''
old_stack, stack = stack
return stack, old_stack
##@inscribe
##@SimpleFunctionWrapper
##def swaack(stack):
## '''swap stack'''
## old_stack, stack = stack
## return stack, old_stack
##@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
return ((a1, (a2, s0)), s1)
(a1, (a2, (a3, ((a4, (a5, s1)), s2)))) = stack
return ((a2, (a3, s1)), s2)
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
return (a0, (a0, (a1, ((a1, s0), s1))))
(a1, ((a2, s1), s2)) = stack
return (a1, (a1, (a2, ((a2, s1), s2))))
def _Tree_delete_clear_stuff(stack):
"""
::
(a2 a1 [a0 ...0] -- [...0])
(a3 a2 [a1 ...1] -- [...1])
"""
((a0, s0), (a1, (a2, s1))) = stack
return (s0, s1)
((a1, s1), (a2, (a3, s2))) = stack
return (s1, s2)
def _Tree_get_E(stack):
"""
::
([a2 a3 ...0] a1 a0 -- a3)
([a3 a4 ...1] a2 a1 -- a4)
"""
(a0, (a1, ((a2, (a3, s0)), s1))) = stack
return (a3, s1)
(a1, (a2, ((a3, (a4, s1)), s2))) = stack
return (a4, s2)
def ccons(stack):
"""
::
(a1 a0 [...0] -- [a1 a0 ...0])
(a2 a1 [...1] -- [a2 a1 ...1])
"""
(s0, (a0, (a1, s1))) = stack
return ((a1, (a0, s0)), s1)
(s1, (a1, (a2, s2))) = stack
return ((a2, (a1, s1)), s2)
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
return (a1, (a0, s1))
((a1, (a2, s1)), s2) = stack
return (a2, (a1, s2))
def fourth(stack):
"""
::
([a0 a1 a2 a3 ...0] -- a3)
([a1 a2 a3 a4 ...1] -- a4)
"""
((a0, (a1, (a2, (a3, s0)))), s1) = stack
return (a3, s1)
((a1, (a2, (a3, (a4, s1)))), s2) = stack
return (a4, s2)
def over(stack):
@ -247,22 +247,22 @@ def rrest(stack):
"""
::
([a0 a1 ...0] -- [...0])
([a1 a2 ...1] -- [...1])
"""
((a0, (a1, s0)), s1) = stack
return (s0, s1)
((a1, (a2, s1)), s2) = stack
return (s1, s2)
def second(stack):
"""
::
([a0 a1 ...0] -- a1)
([a1 a2 ...1] -- a2)
"""
((a0, (a1, s0)), s1) = stack
return (a1, s1)
((a1, (a2, s1)), s2) = stack
return (a2, s2)
def stack(stack):
@ -280,22 +280,33 @@ def stuncons(stack):
"""
::
(... a0 -- ... a0 a0 [...])
(... a1 -- ... a1 a1 [...])
"""
(a0, s0) = stack
return (s0, (a0, (a0, s0)))
(a1, s1) = stack
return (s1, (a1, (a1, s1)))
def stununcons(stack):
"""
::
(... a1 a0 -- ... a1 a0 a0 a1 [...])
(... a2 a1 -- ... a2 a1 a1 a2 [...])
"""
(a0, (a1, s0)) = stack
return (s0, (a1, (a0, (a0, (a1, s0)))))
(a1, (a2, s1)) = stack
return (s1, (a2, (a1, (a1, (a2, s1)))))
def swaack(stack):
"""
::
([...1] -- [...0])
"""
(s1, s0) = stack
return (s0, s1)
def swap(stack):
@ -313,22 +324,22 @@ def swons(stack):
"""
::
([...0] a0 -- [a0 ...0])
([...1] a1 -- [a1 ...1])
"""
(a0, (s0, s1)) = stack
return ((a0, s0), s1)
(a1, (s1, s2)) = stack
return ((a1, s1), s2)
def third(stack):
"""
::
([a0 a1 a2 ...0] -- a2)
([a1 a2 a3 ...1] -- a3)
"""
((a0, (a1, (a2, s0))), s1) = stack
return (a2, s1)
((a1, (a2, (a3, s1))), s2) = stack
return (a3, s2)
def tuck(stack):
@ -353,13 +364,24 @@ def uncons(stack):
return (s0, (a1, s23))
def unit(stack):
"""
::
(a1 -- [a1 ])
"""
(a1, s23) = stack
return ((a1, ()), s23)
def unswons(stack):
"""
::
([a0 ...0] -- [...0] a0)
([a1 ...1] -- [...1] a1)
"""
((a0, s0), s1) = stack
return (a0, (s0, s1))
((a1, s1), s2) = stack
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
n0, n1, n2, n3, n4, n5, n6, n7, n8, n9 = N
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)
As = map(AnyStarJoyType, _R)

View File

@ -30,6 +30,7 @@ class AnyJoyType(object):
return hash(repr(self))
class BooleanJoyType(AnyJoyType): prefix = 'b'
class NumberJoyType(AnyJoyType): prefix = 'n'
class FloatJoyType(NumberJoyType): prefix = 'f'
class IntJoyType(FloatJoyType): prefix = 'i'
@ -41,12 +42,6 @@ class StackJoyType(AnyJoyType):
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
@ -212,7 +207,7 @@ def _to_str(term, stack, switch):
end = '' if term == () else '...'
#end = '...'
else:
end = '...%i' % term.number
end = '' if term == () else '...%i' % term.number
a.append(end)
return '[%s]' % ' '.join(a)
@ -238,43 +233,62 @@ def __(*seq):
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():
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),)
ccons = C(cons, cons)
uncons = __((a1, s0),), __(a1, s0)
unswons = C(uncons, swap)
swons = C(swap, cons)
dup = __(a1,), __(a1, a1)
dupd = __(a2, a1), __(a2, a2, a1)
dupdd = __(a3, a2, a1), __(a3, a3, a2, 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)
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)
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)
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)
succ = pred = __(n1,), __(n2,)
succ = pred = neg = __(n1,), __(n2,)
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_get_E = C(popop, second)
_Tree_delete_clear_stuff = C(rollup, popop, rest)