void addCoreCommands( Interpreter &interp) { // special forms interp.addSpecial( "and", new AndCommand()); interp.addSpecial( "cond", new CondCommand()); interp.addSpecial( "define", new DefineCommand()); interp.addSpecial( "if", new IfCommand()); interp.addSpecial( "lambda", new LambdaCommand()); interp.addSpecial( "let", new LetCommand()); interp.addSpecial( "let*", new LetStarCommand()); interp.addSpecial( "or", new OrCommand()); interp.addSpecial( "quote", new QuoteCommand()); interp.addSpecial( "time", new TimeCommand()); // some basic functions interp.addBuiltin( "begin", beginCommand); interp.addBuiltin( "car", carCommand); interp.addBuiltin( "cdr", cdrCommand); interp.addBuiltin( "cons", consCommand); interp.addBuiltin( "display", displayCommand); interp.addBuiltin( "eq?", new BinaryPredicateAdapter( eq)); interp.addBuiltin( "eqv?", new BinaryPredicateAdapter( eqv)); interp.addBuiltin( "exit", exitCommand); interp.addBuiltin( "gc", gcCommand); interp.addBuiltin( "load", loadCommand); interp.addBuiltin( "memstat", memstatCommand); interp.addBuiltin( "not", notCommand); interp.addBuiltin( "version", versionCommand); // type predicates interp.addBuiltin( "boolean?", new TypePredicate( Handle::ntBOOLEAN)); interp.addBuiltin( "char?", new TypePredicate( Handle::ntCHARACTER)); interp.addBuiltin( "double?", new TypePredicate( Handle::ntDOUBLE)); interp.addBuiltin( "integer?", new TypePredicate( Handle::ntINTEGER)); interp.addBuiltin( "pair?", new TypePredicate( Handle::ntCONS)); interp.addBuiltin( "string?", new TypePredicate( Handle::ntSTRING)); interp.addBuiltin( "symbol?", new TypePredicate( Handle::ntSYMBOL)); interp.addBuiltin( "hashtable?", new TypePredicate( Handle::ntHASHTABLE)); interp.addBuiltin( "keyword?", new TypePredicate( Handle::ntKEYWORD)); interp.addBuiltin( "set?", new TypePredicate( Handle::ntSET)); }