Эта строка вызывает у вас проблемы:
custom_flatten [t], [custom_flatten(h) | accumulator]
Если ваша функция началась с [h | t] = [1, 2, 3]
, t
будет [2, 3]
, и вы передадите [[2, 3]]
следующей функции.Эта функция будет видеть [h | t] = [[2, 3]]
, поэтому h
будет [2, 3]
, а t
будет []
, что передаст [[]]
следующей функции.Тогда ваша функция застрянет, повторяя [h | t] = [[]]
, где h
это []
, а t
это []
.
Так что на самом деле единственная проблема заключается в том, что вы не хотите обернуть t
.Замена строки выше чем-то вроде этого должна решить проблему бесконечной рекурсии.
custom_flatten t, [custom_flatten(h) | accumulator]