reverse -.ptr (p_p_list_item -&w list)
        where (list :: *)
{
  *list = latest, 
  {
    *list->next = .,
    {
      reverse (&latest, *list),
      {
        p_p_list_item latest = .
      }
    }
  };
}

reverse (p_p_list_item -&w list)
     if (!*list)
{
  ;
}

reverse _ -rc -.ptr (p_p_list_item -&w latest, p_list_item -&w item)
{
  with (item)
  {
    if (->next) 
    {
      ->next->next = item,
      {
        reverse (latest, ->next)
      };
    }
    else
    {
      *latest = item; 
    }
  }
}