The question your teacher gave you has already been discussed by Barbara Partee in her introductory paper ‘Lexical Semantics and Compositionality’ (see reference at the end) - only she used almost half empty and almost half full. If we assume that the constituent structure of both expressions is as in (1), and also make the assumption in (2), the question then arises how come the two expressions differ in meaning.
(1) [almost [half [crazy/sane]]]
(2) The meaning of a complex expression is derived by combining the meaning
of each of its elements with that element with which it forms a constituent.
Adopting (2) means that according to (1), we derive the meaning of almost half crazy by first combining the meanings of half and crazy and then combining the meaning of almost with that of half crazy. Since half crazy has the same meaning as half sane, it’s not clear how almost gives one meaning when combined with the first and another meaning when combined with the second.
One way to solve the problem is to deny that the expressions almost half crazy/sane have the structure in (1) and assign them instead the constituent structure in (3), which is also given by the tree in (4).
(3) [[almost half] [crazy/sane]]
see tree on our website
According to (3) and (4), in deriving the meanings of the expressions almost half crazy/sane, the meaning of almost half combines each time with another meaning, and therefore it is not surprising that the two final expressions differ in meaning.
A second way to solve the problem is to accept the constituent structure in (1), but to deny that half crazy and half sane have the same meaning. Maybe the meanings of half crazy and half sane always combine with some approximation/precision value, and when such value is not expressed it is taken to be the absolute precision value (the value expressed by exactly). We can now assume that the meanings of half crazy and half sane are such that they give the same meaning when combining with the meaning of exactly but not when combining with the meanings of other approximation/precision expressions (like almost).
A third way to solve the problem is to accept the constituent structure in (1), but to deny the principle expressed by (2). We can now assume that in deriving the meanings of almost half crazy/sane, the meaning of almost is combined with the meaning of half, even though it doesn’t form a constituent with this element.
Reference: Invitation to Cognitive Science, 2nd edition. Daniel Osherson, general editor; in Part I: Language, Lila Gleitman and Mark Liberman, eds. MIT Press, Cambridge 1995, pp. 311-360.