<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def eval_nonagg_call(self, exp):
    "helper for eval_callx; evaluator for CallX that consume a single value"
    # todo: get more concrete about argument counts
    args=self.eval(exp.args)
    if exp.f=='coalesce':
      a,b=args # todo: does coalesce take more than 2 args?
      return b if a is None else a
    elif exp.f=='unnest': return self.eval(exp.args)[0] # note: run_select does some work in this case too
    elif exp.f in ('to_tsquery','to_tsvector'): return set(self.eval(exp.args.children[0]).split())
    else: raise NotImplementedError('unk_function',exp.f)