docs: def limited_depth_first(problem, depth_limit, graph_search=False, viewer=None):
      '''
      Limited depth first search.
  
      Depth_limit is the maximum depth allowed, being depth 0 the initial state.
      If graph_search=True, will avoid exploring repeated states.
      Requires: SearchProblem.actions, SearchProblem.result, and
      SearchProblem.is_goal.
      '''
      return _search(problem,
                     LifoList(),
                     graph_search=graph_search,
                     depth_limit=depth_limit,
                     viewer=viewer)