Stream programming
MRAB
python at mrabarnett.plus.com
Fri Mar 23 14:00:44 EDT 2012
On 23/03/2012 16:33, Nathan Rice wrote:
>> I will use "<=>" to mean "is equivalent to". That's not part of the DSL.
>> A flow has one or more streams:
>> 1 stream:
>> [1,2,3]
>> 2 streams:
>> [1,3,5] | [2,4,6]
>> Two flows can be concatenated:
>> [1,2,3] + [4,5,6]<=> [1,2,3,4,5,6]
>> [0] + ([1,2] | [3,4]) + [10]<=> [0,1,2,10] | [0,3,4,10]
>> ([1,2] | [10,20]) + ([3,4] | [30,40])<=> [1,2,3,4] | [10,20,30,40]
>
> Algebraically, your concatenation rules don't really make sense - your
> flows are both distributive and non distributive. You also make the
> implicit assumption of an order over streams in a flow, but disregard
> the implications of that assumption in some cases. I understand what
> you're trying to communicate, so I think you need to be a little more
> strict and explicit in your definitions.
>
When concatenating, either there are the same number of streams, or one
of them is a single stream which is duplicated.
Therefore, in this example:
[0] + ([1, 2] | [3, 4])
you're concatenating a single stream with a pair, so the single stream
is duplicated:
([0] | [0]) + ([1, 2] | [3, 4])
and then they can be concatenated:
([0, 1, 2] | [0, 3, 4])
However, this:
([0, 1] | [2, 3]) + ([4, 5] | [6, 7] | [8, 9])
won't work.
More information about the Python-list
mailing list