On Mon, May 4, 2009 at 10:45 AM, kcrisman <kcris...@gmail.com> wrote:
>
> Dear support,
>
> I assume this is known, but I am wondering whether it should be
> treated as a bug,

This is not a bug.  It's a stupid design decision in Python, which we
have to live with until we switch to Python 3.0 or switch to doing
"from __future__ import division":

sage: from __future__ import division
sage: len([2,2])/len([2,3,4])
0.66666666666666663


> or whether someone using len() on lists should be
> assumed to know it might then be operated on with Python /, not
> Sage /, as opposed to the preparser catching this sort of thing.
>
> sage: len([2,2])/len([2,3,4])
> 0
>
> Thanks for any suggestions on what to do with this - right now I have
> to do
>
> sage: Integer(len([2,2]))/Integer(len([2,3,4]))
> 2/3

Trust me, I understand that Python's int floor division sucks.   I'm
teaching undergrads about stats using Sage now, and the most obvious
line of code to compute the mean of a list gets the answer totally
wrong because of this problem.  This already caused a lot of
confusion.

This is definitely not something that should be addressed by the
preparser.  It could be addressed by rewriting len, but I'm very
hesitant to do that, because it will introduce subtle bugs when moving
code from preparsed to the library (.py files).
The way one might rewrite len would be:

sage: import __builtin__
sage: len = lambda x: Integer(__builtin__.len(x))
sage: len([2,2])/len([2,3,4])
2/3

 -- William

--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to sage-support@googlegroups.com
To unsubscribe from this group, send email to 
sage-support-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sage-support
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---

Reply via email to