# Stream programming

MRAB python at mrabarnett.plus.com
Fri Mar 23 19:00:44 CET 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.

```