   defp do_keydelete(list, key, position, new_list) do
     current_value = hd(list)
 
-    new_list = if elem(current_value, position) == key do
+    updated = if elem(current_value, position) == key do
       new_list
     else
       new_list ++ [current_value]
     end
 
-    do_keydelete(tl(list), key, position, new_list)
+    do_keydelete(tl(list), key, position, updated)
   end
 
   def keyfind(list, key, position) do

    if current_index == length(list) do
      new_list
    else
      new_list = case current_index == index do
        true ->
          new_list ++ [func.(list[current_index])]
        _ ->
          new_list ++ [list[current_index]]
      end

      do_update_at(list, index, func, current_index + 1, new_list)
    end
  end


  defp do_keyreplace(list, key, position, new_list, new_tuple) do
    current_value = hd(list)

    updated = if elem(current_value, position) == key do
      new_list ++ [new_tuple]
    else
      new_list ++ [current_value]
    end

    do_keyreplace(tl(list), key, position, updated, new_tuple)
  end

  def zip(list_of_lists) do
