Beispiel #1
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);
        }