@Override
	public Expr eval(InterpContext ctx) throws RuntimeError {
		if (!listq(cdr))
			throw new RuntimeError("eval: illegal use of '.'");
		Expr op = car.eval(ctx);
		if (op instanceof ApplicableObject) {
			if (op instanceof SimpleClosure)
				((SimpleClosure)op).callexp = this;
			Expr[] args = toExprArray(cdr);
			return ((ApplicableObject) op).apply(args, ctx);
		}
		throw new RuntimeError("apply: missing procedure expression in: " + this.display());
	}