Common Lisp has multiple return values and it's quite useful:
(let x (f 12) ...) ; bind x to the first value returned by (f 12) and silently drop the others
(let (x y) (f 12) ...) ; bind x to the first value and y to the second.
That way, I can return more information without breaking existing code. That point is really important: in Python I can gracefully add an extra argument, from def foo(x):
...
to def foo(x, y=None):
...
but I can't return an extra value without changing (and uglifying!) all calling code to handle the tuple.The answer to the OP is probably that all computer languages derive from Fortran, and Fortran derived from maths, so it chose f(x, y) as the notation for function application. With that notation, there's no elegant way of handling more return values, and language designers might feel that the extra complexity/ugliness isn't worth it. That, and intellectual inertia.