Function and procedure with arguments out

A very simple difference between these two is
A Procedure is used to perform an action!
A function is used to compute something and then return it to the calling environment.

The question is about the out argument.

Both have certain usages:

Like if you want that the returned value should be returned in an expression:

a := b * tax(c);

Tax must be a function with a value returning , you cannot use out parameter in such context, moreover when u want your function to return single value in your select statement you cannot use out parameter.

On the other hand if you want to return multiple values the function returning value will not be sufficient because a function can return one and only one value.