public function conditional($condition1, $map1/*, $condition2, $map2*/)
    {
        $args = func_get_args();
        return function(Expression $expr, $compiler) use ($args)
        {
            $numargs = count($args);
            for ($i = 0; $i + 1 < $numargs; $i += 2) {
                $condition = $args[$i];
                $map = $args[$i+1];
                if ($condition($expr))
                    return $map($expr, $compiler);
            }
            throw new UnregisteredTransformationException("No condition matched with the given expression");
        };
    }