Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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))
Example #4
0
 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))