On Nov 14, 2008, at 7:05 AM, Jason Grout wrote:
>
> Mike Hansen wrote:
>> Hello,
>>
>> On Nov 14, 12:26 am, Jason Grout <[EMAIL PROTECTED]> wrote:
>>> Franco Saliola wrote:
>>>
>>>>> Any comments or objections?
>>>> What about list comprehensions? Something like the following.
>>>> sage: var('i,n')
>>>> (i, n)
>>>> sage: sum(2^i for i in range(n+1))
>>>> 2^(n+1) - 1
>>>> I ask because this seems like the natural/first thing a user
>>>> would try.
>>> It's consistent:
>>>
>>> sage: sum(i for i in range(10))
>>> 45
>>>
>>> However, range would have to also be overridden here, since range
>>> only
>>> accepts integers.
>>>
>>> Or we could override the ellipsis notation:
>>>
>>> sum(i for i in (1..oo))
>>>
>>> sum(i for i in (1..n+1))
>>
>> I don't think any of these are even feasible or what we want since
>> they create a "black box" generator which gets passed into sum.
>
>
> I agree that they probably aren't feasible. I was throwing them
> out for
> the purposes of brainstorming for interfaces.
Given that they're by far the most natural interface, we shouldn't
rule them out for sure. Consider
sage: import dis
sage: g = (i for i in range(10) if i % 3r)
sage: dis.dis(foo(10).gi_frame.f_code)
2 0 SETUP_LOOP 29 (to 32)
3 LOAD_GLOBAL 0 (range)
6 LOAD_FAST 0 (n)
9 CALL_FUNCTION 1
12 GET_ITER
>> 13 FOR_ITER 15 (to 31)
16 STORE_FAST 1 (i)
3 19 LOAD_FAST 1 (i)
22 LOAD_FAST 1 (i)
25 BINARY_MULTIPLY
26 YIELD_VALUE
27 POP_TOP
28 JUMP_ABSOLUTE 13
>> 31 POP_BLOCK
>> 32 LOAD_CONST 0 (None)
35 RETURN_VALUE
If we evaluate the conditional (12-19) with the loop variable set to
a symbolic we get the condition, and we evaluate the expression
(22-25) at a symbolic loop variable to get the generic term. The
inner iterator is local, and we can recognize range, xrange, and
recursively attempt to descend for others. Of course the [a..b]
notation would have to be extended to support symbolic endpoints, and
one would have to be careful to not botch up arbitrary generators.
- Robert
--~--~---------~--~----~------------~-------~--~----~
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/sage-devel
URLs: http://www.sagemath.org
-~----------~----~----~----~------~----~------~--~---