public SchemeObject Invoke(SchemeObject args, SchemeEnvironment env)
	{
		SchemeObject argList = args;
		SchemeObject temp = SchemeObject.NIL;
		String result = "";
		boolean symbol = true;
		while(argList != SchemeObject.NIL)
		{
			temp = interpreter.Eval(argList.Car(), env);
			if(temp.isError())
			{
				return temp;
			}
			if(!(temp.isString() || temp.isSymbol() || temp.isNumber()))
			{
				return new SchemeObject(SchemeObject.ERROR,
					"Wrong argument type: symbol or string expected in primitive Word");
			}
			if(!temp.isSymbol()) //XXX need to detect valid symbols properly
			{
				symbol = false;
			}
			if(temp.isNumber())
			{
				result += ((Double)(temp.mContents)).toString();
			}
			else
			{
				result += (String)(temp.mContents);
			}
			argList = argList.Cdr();
		}
		if(symbol)
		{
			return new SchemeObject(SchemeObject.SYMBOL, result);
		}
		return new SchemeObject(SchemeObject.STRING, result);
	}