'Add a terminal to the set. Terminals can be named
using the optional *name* argument. This should be
used : to define named constant (i.e.: pi); to speed the
evaluation time when the object is long to build; when
the object does not have a __repr__ functions that returns
the code to build the object; when the object class is
not a Python built-in.
:param terminal: Object, or a function with no arguments.
:param ret_type: Type of the terminal.
:param name: defines the name of the terminal in the expression.'

def addTerminal(self, terminal, ret_type, name=None):

    symbolic = False
    if ((name is None) and callable(terminal)):
        name = terminal.__name__
    assert (name not in self.context), ("Terminals    are    required    to    have    a    unique    name.    Consider    using    the    argument    'name'    to    rename    your    second    %s    terminal." % (name,))
    if (name is not None):
        self.context[name] = terminal
        terminal = name
        symbolic = True
    elif (terminal in (True, False)):
        self.context[str(terminal)] = terminal
    prim = Terminal(terminal, symbolic, ret_type)
    self._add(prim)
    self.terms_count += 1
