Пример #1
0
 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);
 }
Пример #2
0
        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);
        }
Пример #3
0
 public abstract LispDataType Evaluate(LispInterpreter context);