def basis_function_ders_one(degree, knot_vector, span, knot, order):
    """ Computes the derivative of one basis functions for a single parameter.

    Implementation of Algorithm A2.5 from The NURBS Book by Piegl & Tiller.

    :param degree: degree, :math:`p`
    :type degree: int
    :param knot_vector: knot_vector, :math:`U`
    :type knot_vector: list, tuple
    :param span: knot span, :math:`i`
    :type span: int
    :param knot: knot or parameter, :math:`u`
    :type knot: float
    :param order: order of the derivative
    :type order: int
    :return: basis function derivatives
    :rtype: list
    """
    ders = [(0.0) for _ in range(0, order + 1)]
    if knot < knot_vector[span] or knot >= knot_vector[span + degree + 1]:
        for k in range(0, order + 1):
            ders[k] = 0.0
        return ders
    N = [[(0.0) for _ in range(0, degree + 1)] for _ in range(0, degree + 1)]
    for j in range(0, degree + 1):
        if knot_vector[span + j] <= knot < knot_vector[span + j + 1]:
            N[j][0] = 1.0
    for k in range(1, degree + 1):
        saved = 0.0
        if N[0][k - 1] != 0.0:
            saved = (knot - knot_vector[span]) * N[0][k - 1] / (knot_vector
                [span + k] - knot_vector[span])
        for j in range(0, degree - k + 1):
            Uleft = knot_vector[span + j + 1]
            Uright = knot_vector[span + j + k + 1]
            if N[j + 1][k - 1] == 0.0:
                N[j][k] = saved
                saved = 0.0
            else:
                temp = N[j + 1][k - 1] / (Uright - Uleft)
                N[j][k] = saved + (Uright - knot) * temp
                saved = (knot - Uleft) * temp
    ders[0] = N[0][degree]
    for k in range(1, order + 1):
        ND = [(0.0) for _ in range(0, k + 1)]
        for j in range(0, k + 1):
            ND[j] = N[j][degree - k]
        for jj in range(1, k + 1):
            if ND[0] == 0.0:
                saved = 0.0
            else:
                saved = ND[0] / (knot_vector[span + degree - k + jj] -
                    knot_vector[span])
            for j in range(0, k - jj + 1):
                Uleft = knot_vector[span + j + 1]
                Uright = knot_vector[span + j + degree - k + jj + 1]
                if ND[j + 1] == 0.0:
                    ND[j] = (degree - k + jj) * saved
                    saved = 0.0
                else:
                    temp = ND[j + 1] / (Uright - Uleft)
                    ND[j] = (degree - k + jj) * (saved - temp)
                    saved = temp
        ders[k] = ND[0]
    return ders
