def cps_call(self, compiler, cont, args): if self.arity!=len(args): raise clauses = [] for head, body in self.rules: clauses.append(begin(unify_macro_head(compiler, cont, args, head), body)) if self.has_cut(): return wrap_cut(or_(*clauses)).cps(compiler, cont) else: return or_(*clauses).cps(compiler, cont)
def cps_call(self, compiler, cont, args): if self.arity != len(args): raise clauses = [] for head, body in self.rules: clauses.append(begin(unify_macro_head(compiler, cont, args, head), body)) if self.has_cut(): return wrap_cut(or_(*clauses)).cps(compiler, cont) else: return or_(*clauses).cps(compiler, cont)
def cps(self, compiler, cont): k = compiler.new_var(il.ConstLocalVar("cont")) params = tuple([compiler.new_var(Const("arg")) for x in range(self.arity)]) clauses = [] for head, body in self.rules: head_exps = begin(*tuple(unify_head_item2(param, head_item) for param, head_item in zip(params, head))) clauses.append(begin(head_exps, body)) if self.has_cut(): body = wrap_cut(or_(*clauses)).cps(compiler, k) else: body = or_(*clauses).cps(compiler, k) params = tuple(param.interlang() for param in params) return cont(il.Lamda((k,) + params, body))
def cps(self, compiler, cont): k = compiler.new_var(il.ConstLocalVar('cont')) params = tuple([compiler.new_var(il.ConstLocalVar('arg')) for x in range(self.arity)]) clauses = [] for head, body in self.rules: head_exps = begin(*tuple(unify_macro_head_item2(param, head_item) for param, head_item in zip(params, head))) clauses.append(begin(head_exps, body)) if self.has_cut(): body = wrap_cut(or_(*clauses)).cps(compiler, k) else: body = or_(*clauses).cps(compiler, k) return cont(il.Lamda((k,)+params, body))