<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parameter_names(self, add_self=False, adjust_for_printing=False, recursive=True, intermediate=False):
 """ Get the names of all parameters of this model or parameter. It starts from the parameterized object you are calling this method on. Note: This does not unravel multidimensional parameters, use parameter_names_flat to unravel parameters! :param bool add_self: whether to add the own name in front of names :param bool adjust_for_printing: whether to call `adjust_name_for_printing` on names :param bool recursive: whether to traverse through hierarchy and append leaf node names :param bool intermediate: whether to add intermediate names, that is parameterized objects """

        if adjust_for_printing: adjust = adjust_name_for_printing
        else: adjust = lambda x: x
        names = []
        if intermediate or (not recursive):
            names.extend([adjust(x.name) for x in self.parameters])
        if intermediate or recursive: names.extend([
                xi for x in self.parameters for xi in
                 x.parameter_names(add_self=True,
                                   adjust_for_printing=adjust_for_printing,
                                   recursive=True,
                                   intermediate=False)])
        if add_self: names = map(lambda x: adjust(self.name) + "." + x, names)
        return names