What is the rule for adjective order?
How about this rule? <i>Order the modifiers to maximize the product of their successive restrictive effects.</i> For example, we would prefer "great green dragon" to "green great dragon" because<p><pre><code>    ([_] - [great _]) * ([great _] - [great green _])
</code></pre>
is greater than<p><pre><code>    ([_] - [green _]) * ([green _] - [green great _]),
</code></pre>
where the notation [<i>x</i> _] denotes the expected number of substitutions admitted by the hole (_) in the context <i>x</i>.<p>Note that this ordering rule seems to do the right thing for the obvious corner cases.  For example, we would prefer "modern brick house" to "brick modern house" because, in the second ordering, [brick modern _] is about the same as [brick _], making the second term in<p><pre><code>    ([_] - [brick _]) * ([brick _] - [brick modern _])
</code></pre>
tend toward zero, making the preference score for "brick modern house" also tend toward zero.<p>EDITED TO ADD:  Just to be clear, I'm not claiming that this is the rule we actually use when we're putting words together.  I'm claiming that this is the "true" rule, to the extent that anything can be said to be true in human communications. What we do in our heads works out to be an approximation: We (1) choose the modifiers that we think we need and (2) order them so that none seems wasted.  For example, when describing a modern brick house, we know that "modern" and "brick" have to go somewhere, but putting "modern" after "brick" makes it impotent, so we put it before. By avoiding these "zeroes," which ring hollow to our inner ear, we make every word earn its place and indirectly seek the product-maximizing ordering.