Python from Wise Guy's Viewpoint
Matthias Blume
find at my.address.elsewhere
Tue Oct 28 11:55:34 EST 2003
Matthew Danish <mdanish at andrew.cmu.edu> writes:
> On Tue, Oct 28, 2003 at 11:20:45AM +0100, ketil+news at ii.uib.no wrote:
> > Matthew Danish <mdanish at andrew.cmu.edu> writes:
> > > What is this stuff? I am talking about integers here!
> >
> > But the SML program isn't. Or it may be, and maybe not. So it's
> > ambigous without type information.
> >
> > > Why can't the implementation figure out how to represent them most
> > > efficiently?
> >
> > Because it needs a type annotation or inference to decide that the
> > numbers are indeed integers, and not a different set with different
> > arithmetic properties.
>
> 1 is an integer. Simple type inference. In Lisp, it's also a fixnum,
> it's also an (unsigned-byte 23), it's also an (integer 1 (2)), etc.
>
> > > Lisp gets exact rational arithmetic right, why don't ML or Haskell?
> >
> > Could you point to a case where they don't? I don't understand your
> > criticism at all. Is the ability to do modulo arithmetic "wrong"?
>
> - fun fact 0 = 1 | fact n = n * fact (n - 1);
> val fact = fn : int -> int
> - fact 10;
> val it = 3628800 : int
> - fact 15;
> val it = 1307674368000 : int (* ideally *)
$ sml
Standard ML of New Jersey v110.43.3 [FLINT v1.5], September 26, 2003
- fun fact 0 = 1 : IntInf.int
= | fact n = n * fact (n - 1);
[autoloading]
[autoloading done]
val fact = fn : IntInf.int -> IntInf.int
- fact 15;
val it = 1307674368000 : IntInf.int
-
> - 1 * 1.0;
> val it = 1.0 : float (* ideally *)
That's not "ideal" at all, to me. I find the automatic conversions in
C a paint in the b*tt because it is not obvious at all where they
happen in a given expression. How hard is it to write
real 1 * 1.0
thereby making things explicit, unambiguous, and non-surprising?
Matthias
More information about the Python-list
mailing list