expression
.multiply
This function is overloaded, it supports three different signatures:
expression
.multiply(
exp
)
The product (i.e., the concatenation) of two expressions: a.multiply(b)
=> ab
.
expression
.multiply(
num
)
The repeated multiplication (concatenation) of an expression with itself: a.multiply(3)
=> aaa
. Exponent -1
denotes the infinity: the Kleene star.
expression
.multiply((
min
,
max
))
The sum of repeated multiplications of an expression: a.multiply((2,4))
=> aa+aaa+aaaa
.
Preconditions:
min
<=
max
See also:
In [1]:
import vcsn
ctx = vcsn.context('law_char, q')
def exp(e):
return ctx.expression(e)
In [2]:
exp('a*b') * exp('ab*')
Out[2]:
Of course, trivial identities are applied.
In [3]:
exp('<2>a') * exp('<3>\e')
Out[3]:
In [4]:
exp('<2>a') * exp('\z')
Out[4]:
In the case of word labels, adjacent words are not fused: concatenation of two expressions behaves as if the expressions were parenthetized. Pay attention to the space between $a$ and $b$ below, admittedly too discreet.
In [5]:
exp('a') * exp('b') # Two one-letter words
Out[5]:
In [6]:
exp('ab') # One two-letter word
Out[6]:
In [7]:
exp('(a)(b)') # Two one-letter words
Out[7]:
In [8]:
exp('ab') ** 3
Out[8]:
In [9]:
exp('a*') * 3
Out[9]:
Use the exponent -1 to mean infinity
. Alternatively, you may invoke a.star
instead of a ** -1
.
In [10]:
exp('ab') ** -1
Out[10]:
In [11]:
exp('ab').star()
Out[11]:
In [12]:
exp('ab') ** (2, 2)
Out[12]:
In [13]:
exp('ab') ** (2, 4)
Out[13]:
In [14]:
exp('ab') ** (-1, 2)
Out[14]:
In [15]:
exp('ab') ** (2, -1)
Out[15]: