<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def hist(hist_function, *, options={}, **interact_params):
 """ Generates an interactive histogram that allows users to change the parameters of the input hist_function. Args: hist_function (Array | (*args -> Array int | Array float)):
 Function that takes in parameters to interact with and returns an array of numbers. These numbers will be plotted in the resulting histogram. Kwargs: {options} interact_params (dict):
 Keyword arguments in the same format as `ipywidgets.interact`. One argument is required for each argument of `hist_function`. Returns: VBox with two children: the interactive controls and the figure. """

    params = {
        'marks': [{
            'sample': _array_or_placeholder(hist_function),
            'bins': _get_option('bins'),
            'normalized': _get_option('normalized'),
            'scales': (
                lambda opts: {'sample': opts['x_sc'], 'count': opts['y_sc']}
            ),
        }],
    }
    fig = options.get('_fig', False) or _create_fig(options=options)
    [hist] = _create_marks(
        fig=fig, marks=[bq.Hist], options=options, params=params
    )
    _add_marks(fig, [hist])

    def wrapped(**interact_params):
        hist.sample = util.maybe_call(hist_function, interact_params)

    controls = widgets.interactive(wrapped, **interact_params)

    return widgets.VBox([controls, fig])