def greedy_seplist(compiler, cont, item, separator, template=None, result=None): if result is None: return begin(item, greedy_any1(begin(separator, item)) ).cps(compiler, cont) else: result1 = compiler.new_var(il.ConstLocalVar('result')) result2 = compiler.new_var(Var('result')) result2_2 = result2.interlang() template1 = template.interlang() return begin(item, direct_interlang(il.Assign(result1, il.GetValue(template1))), greedy_any2(begin(separator, item), template, result2), eval_unify(result, direct_interlang(il.add(il.MakeList(result1), result2_2))) ).cps(compiler, cont)
def seplist(compiler, cont, item, separator, template=None, result=None): if result is None: return begin(item, any1(begin(separator, item))).cps(compiler, cont) else: result1 = compiler.new_var(il.ConstLocalVar('result')) result2 = compiler.new_var(Var('result')) result2_2 = result2.interlang() template1 = template.interlang() return begin( item, direct_interlang(il.Assign(result1, il.GetValue(template1))), any2(begin(separator, item), template, result2), eval_unify( result, direct_interlang(il.add(il.MakeList(result1), result2_2)))).cps(compiler, cont)
def unify_macro_head_item1(compiler, cont, arg, head_item): # for direct call if isinstance(head_item, Var) and not isinstance(head_item, LogicVar): k = compiler.new_var(il.ConstLocalVar("cont")) return Assign(head_item, direct_interlang(il.Lamda((k,), arg.cps(compiler, k)))) else: return unify(arg, head_item)
def unify_macro_head_item1(compiler, cont, arg, head_item): # for direct call if isinstance(head_item, Var) and not isinstance(head_item, LogicVar): k = compiler.new_var(il.ConstLocalVar('cont')) return Assign(head_item, direct_interlang(il.Lamda((k, ), arg.cps(compiler, k)))) else: return unify(arg, head_item)
def cps_call(self, compiler, cont, args): # see The 90 minute Scheme to C compiler by Marc Feeley if self.has_cut(): fun = wrap_cut(self.body).cps(compiler, cont) else: fun = self.body.cps(compiler, cont) params = tuple(x.interlang() for x in self.params) for var, arg in reversed(zip(params, args)): k = compiler.new_var(il.ConstLocalVar("cont")) fun = direct_interlang(il.Lamda((k,), arg.cps(compiler, k))).cps(compiler, il.Clamda(var, fun)) return fun
def cps_call(self, compiler, cont, args): # see The 90 minute Scheme to C compiler by Marc Feeley if self.has_cut(): fun = wrap_cut(self.body).cps(compiler, cont) else: fun = self.body.cps(compiler, cont) params = tuple(x.interlang() for x in self.params) for var, arg in reversed(zip(params, args)): k = compiler.new_var(il.ConstLocalVar('cont')) fun = direct_interlang(il.Lamda((k, ), arg.cps(compiler, k)) ).cps(compiler, il.Clamda(var, fun)) return fun