Why is foo a statement and bar(7,1) an expression? You do not elaborate on the contents of the functions, so if bar has an imperative construct in it(if,for,etc), it is also a statement. If foo only computes a value based on the return value of bar(7,1) it will be only an expression. What am i missing?