protected static LithpFunctionDefinitionNative builtin(string name, LithpFunctionDefinitionDelegate fn, params string[] args) { LithpFunctionDefinitionNative x = new LithpFunctionDefinitionNative(name, args, fn); builtins[x.Name] = x; return(x); }
public LithpFunctionDefinitionNative(LithpAtom name, string[] parameters, LithpFunctionDefinitionDelegate body) { fn_name = name; fn_params = parameters; fn_body = body; Match x = Regex.Match(name, @"/(\d+|\*)$"); if (x == Match.Empty) { arity = fn_params.Count(); this.fn_name = LithpAtom.Atom(name.Name + "/" + arity.Value.ToString()); } else { string strArity = x.Groups[1].Value; if (strArity == "*") { arity = null; } else { arity = int.Parse(strArity); } } }
protected static LithpPrimitive CallBuiltin(LithpFunctionDefinitionDelegate fn, LithpOpChain state, LithpInterpreter interp, params LithpPrimitive[] parameters) { return(fn(new LithpList(parameters), state, interp)); }