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())); }
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); }
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); }
void AddControlProcedures() { environment.Bind("quit", new CSharpProcedure(args => { exit = true; return(null); })); }
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); }
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); }
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)); }