Ejemplo n.º 1
0
 public static void AddLibrary(Env env)
 {
     env.Bind("string-append", StringAppend);
     env.Bind("string-length", StringLength);
     env.Bind("make-string", MakeString);
     env.Bind("number->string", NumberToString);
     env.Bind("string", StringFromChars);
     env.Bind("string-ref", StringRef);
     env.Bind("string=?", ListUEqual <UString>());
     env.Bind("string->list", StringList);
     env.Bind("list->string", ListString);
     env.Bind("string-copy", Conversion <UString, Exp>(str => str.Clone()));
 }
Ejemplo n.º 2
0
        static Env CreateCallEnvironment(SchemeProcedure procedure, Cell callValues, Env outerEnv)
        {
            var evalEnv = new Env(outerEnv);

            for (int i = 0; i < procedure.NumberFixedArguments; i++)
            {
                evalEnv.Bind(procedure.ArgumentNames[i], callValues[i]);
            }

            if (procedure.HasVariadicArguments)
            {
                evalEnv.Bind(procedure.VariadicName, callValues.Skip(procedure.NumberFixedArguments));
            }

            return(evalEnv);
        }
Ejemplo n.º 3
0
 public static void AddLibrary(Env env)
 {
     env.Bind("make-vector", MakeVector);
     env.Bind("vector-length", VectorLength);
     env.Bind("vector", VectorFromElements);
     env.Bind("vector-ref", VectorRef);
     env.Bind("vector-set!", VectorSet);
     env.Bind("vector-fill!", VectorFill);
     env.Bind("vector->list", VectorToList);
     env.Bind("list->vector", ListToVector);
 }
Ejemplo n.º 4
0
 void AddControlProcedures()
 {
     environment.Bind("quit", new CSharpProcedure(args => { exit = true; return(null); }));
 }
Ejemplo n.º 5
0
        public static void AddLibrary(Env env)
        {
            env.Bind("number?", IsA <Number>());
            env.Bind("integer?", IsA <Number>(n => n.IsInteger()));
            env.Bind("real?", IsA <Number>()); // all numbers are real with current implementation
            env.Bind("boolean?", IsA <Boolean>());
            env.Bind("procedure?", IsA <Procedure>());
            env.Bind("list?", IsA <Cell>(c => c.IsList));
            env.Bind("pair?", IsA <Cell>(c => c != Cell.Null));
            env.Bind("vector?", IsA <Vector>());
            env.Bind("string?", IsA <UString>());
            env.Bind("byte-vector?", IsA <ByteVector>());
            env.Bind("char?", IsA <Character>());
            env.Bind("null?", new CSharpProcedure(p => Boolean.Get(p.First == Cell.Null)));
            env.Bind("symbol?", IsA <Identifier>());

            env.Bind("symbol->string", new CSharpProcedure(p => new UString((p.First as Identifier).str)));
            env.Bind("string->symbol", new CSharpProcedure(p => Identifier.From((p.First as UString).str)));
            env.Bind("symbol=?", ListUEqual <Identifier>());

            env.Bind("equal?", Equal);
            env.Bind("eqv?", Eqv);
            env.Bind("eq?", Eq);

            env.Bind("print", Print);

            env.Bind("vector-length", new CSharpProcedure(list => new IntegerNumber(((list as Cell).First as Vector).Length)));
            env.Bind("byte-vector-length", new CSharpProcedure(list => new IntegerNumber(((list as Cell).First as ByteVector).Length)));
            env.Bind("append", Append);
            env.Bind("car", Car);
            env.Bind("cdr", Cdr);

            env.Bind("cons", Cons);

            Parser.Load(UScheme.LibraryDir + "stdlib.usc", env);
        }
Ejemplo n.º 6
0
        public static void AddLibrary(Env env)
        {
            env.Bind("abs", UnaryProcedure(Math.Abs));
            env.Bind("log", UnaryProcedure(Math.Log));
            env.Bind("sin", UnaryProcedure(Math.Sin));
            env.Bind("cos", UnaryProcedure(Math.Cos));
            env.Bind("acos", UnaryProcedure(Math.Acos));
            env.Bind("asin", UnaryProcedure(Math.Asin));
            env.Bind("tan", UnaryProcedure(Math.Tan));
            env.Bind("atan", UnaryProcedure(Math.Atan));
            env.Bind("max", CompareAndCarryIf((a, b) => a.LessThan(b)));
            env.Bind("min", CompareAndCarryIf((a, b) => b.LessThan(a)));

            env.Bind("+", Number.ADD);
            env.Bind("-", Number.SUB);
            env.Bind("*", Number.MULT);
            env.Bind("/", Number.DIV);
            env.Bind("=", Number.EQUALS);
            env.Bind("<", Number.LESSTHAN);
            env.Bind("<=", Number.LESSOREQUALTHAN);
            env.Bind(">", Number.GREATERTHAN);
            env.Bind(">=", Number.GREATEROREQUALTHAN);
        }
Ejemplo n.º 7
0
        public static void AddLibrary(Env env)
        {
            env.Bind("port?", IsA <Port>());
            env.Bind("input-port?", CallWithFirstAsPort(port => Boolean.Get(port != null && port.IsInput)));
            env.Bind("output-port?", CallWithFirstAsPort(port => Boolean.Get(port != null && port.IsOutput)));

            env.Bind("read", CallWithPortOrDefaultInput(Read));
            env.Bind("read-char", CallWithPortOrDefaultInput(ReadChar));
            env.Bind("peek-char", CallWithPortOrDefaultInput(PeekChar));
            env.Bind("char-ready?", CallWithPortOrDefaultInput(CharReady));

            env.Bind("eof-object?", IsEof);

            env.Bind("write", CallWithPortOrDefaultOutput(Write));
            env.Bind("display", CallWithPortOrDefaultOutput(Display));
            env.Bind("newline", CallWithPortOrDefaultOutput(WriteNewline));
            env.Bind("write-char", CallWithPortOrDefaultOutput(WriteChar));

            env.Bind("current-input-port", new CSharpProcedure(parameters => env.CurrentInput));
            env.Bind("current-output-port", new CSharpProcedure(parameters => env.CurrentInput));

            env.Bind("open-input-file", OpenInputFile);
            env.Bind("open-output-file", OpenOutputFile);

            env.Bind("close-input-port", CallWithFirstAsPort(ClosePort));
            env.Bind("close-output-port", CallWithFirstAsPort(ClosePort));
        }