I agree with troflip. The eval procedure is not required. The same thing would work if you did this:
FormatPrint("%d" (+ 1 2)) // Will print '3'
In the above example, it is actually the + that acts as a procedure. The 1 and 2 are in effect passed to it and it adds them together.
I'm surprised that you had to put the true and false parameters first. There should be no reason I can see why this would be required. What happens if you wrap the condition in () characters as in the following?
iif((> 1 2) "blue" "green")
Maybe the problem is that without the () the compiler is assuming that it is wrapped in () when it appears at the end of the parameter list. Maybe it can't assume that if the condition appears at the start of the parameter list, unless it is wrapped in () as in the above example. Yeah, thinking it through, if you were to write this:
iif(> 1 2 "blue" "green")
then the compiler would probably think that the 1, 2, "blue" and "green" are all parameters for the > operator.