from continuation import caller

def choose(cs):
 if not cs:
  if _p:_p.pop()()
  raise "no answers found"
 _p.append(lambda c=cs[1:],k=caller():k(choose(c)))
 return cs[0]

def amb_eval(f,*a):
 global _p;_p=[]
 try:return apply(f,a)
 finally:_p=[]

