Ваш код почти правильный.Проблема здесь:
(x,y):: loop f t acc
Вы объединяетесь с результатом loop
, что означает, что он не является хвостовой рекурсией, потому что он должен ждать, пока результат loop
затем объединится.
Ключ находится в параметре acc
, который обозначает аккумулятор.Это означает, что вам нужно конкатенировать ваш результирующий список, который затем передается на следующий уровень, пока больше нечего добавить, и тогда acc
имеет заполненный список, который возвращается сюда:
| _ -> acc