public bool Contains(object value) { foreach (object item in this) { if (Runtime.Equal(item, value)) { return(true); } } return(false); }
private object CompilePostfix() { // postfix-expr: primary-expr // postfix-expr: identifier '(' expr-list ')' // postfix-expr: '(' expr ')' if (Token is Symbol && Runtime.Equal(NextToken, "(")) { var func = Token; Accept(); Accept(); var args = CompileArgs(")"); return(Runtime.MakeListStar(func, args)); } else if (Token is Symbol && Runtime.Equal(NextToken, "[")) { var arr = Token; Accept(); Accept(); var args = CompileArgs("]"); return(Runtime.MakeListStar(Symbols.GetElt, arr, args)); } else if (Runtime.Equal(Token, "(")) { Accept(); var args = CompileArgs(")"); if (args.Count == 1) { return(args[0]); } else { return(Runtime.MakeListStar(Symbols.Do, args)); } } else { return(CompileAtom()); } }
private Vector CompileArgs(string terminator) { var args = new Vector(); while (true) { args.Add(Compile()); if (!Runtime.Equal(Token, ",")) { break; } Accept(); } if (!Runtime.Equal(Token, terminator)) { throw new LispException("Missing {0} in infix expression: {1}", terminator, InfixStr); } Accept(); return(args); }
object IApply.Apply(object[] args) { return(Runtime.Equal(args)); }