[Python-Dev] type categories
Guido van Rossum
guido@python.org
Mon, 26 Aug 2002 15:26:34 -0400
> Indeed, ML completely unifies Cartesian product types and tuples in a
> very, very cool way:
>
> Every function takes exactly one argument
> and yields exactly one result.
>
> However, the argument or result can be a tuple.
>
> So in ML, when I write
>
> f(x,y)
>
> that really means to bundle x and y into a tuple, and call f with that
> tuple as its argument. So, for example, if I write
>
> val xy = (x,y)
>
> which defines a variable named xy and binds it to the tuple (x,y), then
>
> f xy
>
> means exactly the same thing as
>
> f(x,y)
>
> The parentheses are really tuple constructors, and ML doesn't require
> parentheses for function calls at all.
ABC did this, and very early Python did this, too (but Python always
required parentheses for calls). However, adding optional arguments
caused trouble: after
def f(a, b=1):
print a*b
t = (1, 2)
what should
f(t)
mean? It could mean either f((1, 2), 1) or f(1, 2). So we had to get
rid of that. I suppose ML doesn't have optional arguments (in the
sense of Python), so the problem doesn't occur there; that's why it
wasn't a problem in ABC.
--Guido van Rossum (home page: http://www.python.org/~guido/)