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