public static LispLiteral LOAD(Context context, params LispLiteral[] args) { foreach (var file in args) { string filename = (file as StringLiteral).StringValue; if (File.Exists(filename)) { string source = File.ReadAllText(filename); BuildParser(); var r = Parser.Parse(source); if (r.IsError) { r.Errors.ForEach(e => Console.WriteLine(e.ErrorMessage)); return(null); } var x = LispInterpreter.Interprete(context, r.Result as LispProgram); return(x); } else { Console.WriteLine("file not found"); } } return(NilLiteral.Instance); }
public static LispLiteral DEFUN(Context context, params LispLiteral[] args) { AssertArgNumber("defun", args, 3); AssertArgType("defun", args, 0, LispValueType.Symbol); AssertArgType("defun", args, 1, LispValueType.Sexpr); AssertArgType("defun", args, 2, LispValueType.Sexpr); string functionName = (args[0] as SymbolLiteral).Value; var lambda = new Lambda((args[1] as SExpr).Elements, args[2] as SExpr); var runtimeFunction = LispInterpreter.GetLambda(context, lambda, functionName); runtimeFunction.Name = functionName; context.Set(functionName, runtimeFunction); return(runtimeFunction); }
public abstract LispDataType Evaluate(LispInterpreter context);