I realize I'm addressing a post that is EXTREMELY old, but I wanted to make sure that accurate information is provided in case anyone else comes here looking for an answer to the qestion.
The original problem posted is not an issue with AGI's handling of input; it's an issue of where commands are processed in the game's logic.
if (said("why", "rol"))
will return TRUE for any input that begins with "why", including "why" by itself, "why" followed by known words, and "why" followed by an unknown word (as long as haveInput[f2] is TRUE, and haveMatch[f4] is FALSE). The reason the original poster is getting the "I don't know X" message is because the check for unknown words is happening BEFORE the check for "why", "rol".
This is easy enough to demonstrate by putting the 'if' block at the beginning of Logic 0. You will get the desired response. As they say, 'timing is everything', and with AGI, it's even more important to know where you place code to make sure you get the results you want. AGI programming can result in really strange results if you don't pay attention to the order of things.
(AND, if you also have an unknown word in your input, keep in mind that even after displaying the response to 'why', you may also get the "I don't know X" response, depending on how your game handles unknown words. The templates that have been around for years will show the "I don't know X" response even if a preceding 'said' command finds a match. You will need to either reset the unknown word value (v9) within your code block responding to "why", or you will need to edit your unknown word handler to not respond if a match has been found.)