Change name of kav() to infer().
This commit is contained in:
parent
ad83e1607e
commit
baae1a5b36
|
|
@ -122,7 +122,7 @@ def unify(u, v, s=None):
|
||||||
if isinstance(u, tuple) and isinstance(v, tuple):
|
if isinstance(u, tuple) and isinstance(v, tuple):
|
||||||
if len(u) != len(v) != 2:
|
if len(u) != len(v) != 2:
|
||||||
raise JoyTypeError(repr((u, v)))
|
raise JoyTypeError(repr((u, v)))
|
||||||
|
|
||||||
a, b = v
|
a, b = v
|
||||||
if isinstance(a, KleeneStar):
|
if isinstance(a, KleeneStar):
|
||||||
if isinstance(b, KleeneStar):
|
if isinstance(b, KleeneStar):
|
||||||
|
|
@ -217,14 +217,14 @@ flatten = lambda g: list(chain.from_iterable(g))
|
||||||
ID = S[0], S[0] # Identity function.
|
ID = S[0], S[0] # Identity function.
|
||||||
|
|
||||||
|
|
||||||
def kav(e, F=ID):
|
def infer(e, F=ID):
|
||||||
if not e:
|
if not e:
|
||||||
return [F]
|
return [F]
|
||||||
|
|
||||||
n, e = e
|
n, e = e
|
||||||
|
|
||||||
if isinstance(n, SymbolJoyType):
|
if isinstance(n, SymbolJoyType):
|
||||||
res = flatten(kav(e, Fn) for Fn in MC([F], n.stack_effects))
|
res = flatten(infer(e, Fn) for Fn in MC([F], n.stack_effects))
|
||||||
|
|
||||||
elif isinstance(n, CombinatorJoyType):
|
elif isinstance(n, CombinatorJoyType):
|
||||||
res = []
|
res = []
|
||||||
|
|
@ -232,10 +232,10 @@ def kav(e, F=ID):
|
||||||
fi, fo = F
|
fi, fo = F
|
||||||
new_fo, ee, _ = combinator(fo, e, {})
|
new_fo, ee, _ = combinator(fo, e, {})
|
||||||
new_F = fi, new_fo
|
new_F = fi, new_fo
|
||||||
res.extend(kav(ee, new_F))
|
res.extend(infer(ee, new_F))
|
||||||
else:
|
else:
|
||||||
lit = s9, (n, s9)
|
lit = s9, (n, s9)
|
||||||
res = flatten(kav(e, Fn) for Fn in MC([F], [lit]))
|
res = flatten(infer(e, Fn) for Fn in MC([F], [lit]))
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from joy.utils.polytypes import *
|
||||||
from joy.utils.stack import list_to_stack as __
|
from joy.utils.stack import list_to_stack as __
|
||||||
|
|
||||||
|
|
||||||
kv = lambda e: kav(__(e))
|
infr = lambda e: infer(__(e))
|
||||||
|
|
||||||
|
|
||||||
globals().update(SYMBOLS)
|
globals().update(SYMBOLS)
|
||||||
|
|
@ -21,24 +21,24 @@ class TestKleeneStar(unittest.TestCase):
|
||||||
]
|
]
|
||||||
# A function that puts a single number on the stack.
|
# A function that puts a single number on the stack.
|
||||||
f = s0, (n0, s0)
|
f = s0, (n0, s0)
|
||||||
self.assertEqual(kv(expression), [f])
|
self.assertEqual(infr(expression), [f])
|
||||||
|
|
||||||
def test_BS(self):
|
def test_BS(self):
|
||||||
expression = pop, swap, rolldown, rest, rest, cons, cons
|
expression = pop, swap, rolldown, rest, rest, cons, cons
|
||||||
# ([a3 a4 ...0] a2 a1 a0 -- [a1 a2 ...0])
|
# ([a3 a4 ...0] a2 a1 a0 -- [a1 a2 ...0])
|
||||||
f = (a0, (a1, (a2, ((a3, (a4, s0)), s1)))), ((a1, (a2, s0)), s1)
|
f = (a0, (a1, (a2, ((a3, (a4, s0)), s1)))), ((a1, (a2, s0)), s1)
|
||||||
self.assertEqual(kv(expression), [f])
|
self.assertEqual(infr(expression), [f])
|
||||||
|
|
||||||
def test_enter(self):
|
def test_enter(self):
|
||||||
expression = a1, (cons, s0), dip # a1 [cons] dip
|
expression = a1, (cons, s0), dip # a1 [cons] dip
|
||||||
# (a0 [...0] -- [a0 ...0] a1)
|
# (a0 [...0] -- [a0 ...0] a1)
|
||||||
f = ((s0, (a0, s1)), (a1, ((a0, s0), s1)))
|
f = ((s0, (a0, s1)), (a1, ((a0, s0), s1)))
|
||||||
self.assertEqual(kv(expression), [f])
|
self.assertEqual(infr(expression), [f])
|
||||||
|
|
||||||
def test_2(self):
|
def test_2(self):
|
||||||
# [cons] i == cons
|
# [cons] i == cons
|
||||||
expression = (cons, s0), i
|
expression = (cons, s0), i
|
||||||
self.assertEqual(kv(expression), kv([cons]))
|
self.assertEqual(infr(expression), infr([cons]))
|
||||||
|
|
||||||
|
|
||||||
##
|
##
|
||||||
|
|
@ -48,7 +48,7 @@ class TestKleeneStar(unittest.TestCase):
|
||||||
|
|
||||||
## print doc_from_stack_effect(*f)
|
## print doc_from_stack_effect(*f)
|
||||||
## print
|
## print
|
||||||
## for sec in kav(e):
|
## for sec in infer(e):
|
||||||
## print sec, doc_from_stack_effect(*sec)
|
## print sec, doc_from_stack_effect(*sec)
|
||||||
## self.assertRaises(KeyError, lambda: {}[23])
|
## self.assertRaises(KeyError, lambda: {}[23])
|
||||||
## def test_leave(self):
|
## def test_leave(self):
|
||||||
|
|
@ -64,7 +64,7 @@ class TestKleeneStar(unittest.TestCase):
|
||||||
##
|
##
|
||||||
##e = (DIP, ())
|
##e = (DIP, ())
|
||||||
##
|
##
|
||||||
##h = kav(e, l[0])
|
##h = infer(e, l[0])
|
||||||
##
|
##
|
||||||
##for z in h:
|
##for z in h:
|
||||||
## print doc_from_stack_effect(*z)
|
## print doc_from_stack_effect(*z)
|
||||||
|
|
@ -76,7 +76,7 @@ class TestKleeneStar(unittest.TestCase):
|
||||||
##
|
##
|
||||||
##expression = (a1, (a3, ((CONS, s0), (DIPD, ()))))
|
##expression = (a1, (a3, ((CONS, s0), (DIPD, ()))))
|
||||||
##
|
##
|
||||||
##for sec in kav(expression):
|
##for sec in infer(expression):
|
||||||
## print doc_from_stack_effect(*sec)
|
## print doc_from_stack_effect(*sec)
|
||||||
##
|
##
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue