protected abstract NodeValue eval(List<NodeValue> args) ;
@Override final public NodeValue eval(Binding binding, FunctionEnv env) { NodeValue s = evalSpecial(binding, env) ; if ( s != null ) return s ; List<NodeValue> argsEval = new ArrayList<NodeValue>() ; for ( int i = 1 ; i <= numArgs() ; i++ ) { NodeValue x = eval(binding, env, getArg(i)) ; argsEval.add(x) ; } return eval(argsEval, env) ; }
@Override final public NodeValue eval(Binding binding, FunctionEnv env) { NodeValue s = evalSpecial(binding, env) ; if ( s != null ) return s ; List<NodeValue> argsEval = new ArrayList<NodeValue>() ; for ( int i = 1 ; i <= numArgs() ; i++ ) { NodeValue x = eval(binding, env, getArg(i)) ; argsEval.add(x) ; } return eval(argsEval, env) ; }
protected abstract NodeValue eval(List<NodeValue> args) ;