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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to