def METHOD_NAME(self, lst):
    """
    insert self between each element of the list `lst`
    Parameter
    ---------
    lst : list
        the list to insert self between its elements
    Example
    -------
    >>> a = [
    ...     CMacro("m"),
    ...     CStringExpression(LiteralString("the macro is: ")),
    ...     LiteralString("."),
    ... ]
    >>> b = CStringExpression("?").join(a)
    ...
    ... # is the same as:
    ...
    >>> b = CStringExpression(
    ...     CMacro("m"),
    ...     CStringExpression("?"),
    ...     CStringExpression(LiteralString("the macro is: ")),
            CStringExpression("?"),
    ...     LiteralString("."),
    ... )
    """
    result = CStringExpression()
    if not lst:
        return result
    result += lst[0]
    for elm in lst[1:]:
        result += self
        result += elm
    return result